說我有是否有一種簡單的方法可以將int轉換爲每個數字的整數數組?
var i = 987654321;
有一種簡單的方法來獲得的數字數組中,
var is = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
相當於沒有.ToString()
ING和遍歷與int.Parse(x)
的字符?
說我有是否有一種簡單的方法可以將int轉換爲每個數字的整數數組?
var i = 987654321;
有一種簡單的方法來獲得的數字數組中,
var is = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
相當於沒有.ToString()
ING和遍歷與int.Parse(x)
的字符?
public Stack<int> NumbersIn(int value)
{
if (value == 0) return new Stack<int>();
var numbers = NumbersIn(value/10);
numbers.Push(value % 10);
return numbers;
}
var numbers = NumbersIn(987654321).ToArray();
替代而不遞歸:
public int[] NumbersIn(int value)
{
var numbers = new Stack<int>();
for(; value > 0; value /= 10)
numbers.Push(value % 10);
return numbers.ToArray();
}
簡而言之:使用環,其分割數模10(%),以獲得催(每個數字),並把它放入陣列。
var x = new Stack<int>();
do
{
x.Push(i % 10);
i /= 10;
} while (i > 0);
return x.ToArray();
哪些沒有另一種方法使用遞歸和使用,從而避免每次插入再分配堆棧(至少前32位):
var list = new Stack<int>(32);
var remainder = 123456;
do
{
list.Push(remainder % 10);
remainder /= 10;
} while (remainder != 0);
return list.ToArray();
是的,這個方法也適用於0和負數。
有趣的是,給這個算法負數-123456,您將獲得{-1,-2,-3,-4,-5,-6}
更新:使用列表來切換因爲這個堆棧會自動給出正確的順序。
這並轉換爲字符串,並遍歷字符,但它可以自動進行排序,並在一個班輪:
var i = 987654321;
var is = i.ToString().Cast<int>().ToArray();
我知道還有比這可能是更好的答案,但這裏是另一個版本:
您可以使用yield return
以升序返回數字(根據重量或任何它被稱爲)。
public static IEnumerable<int> Digits(this int number)
{
do
{
yield return number % 10;
number /= 10;
} while (number > 0);
}
12345 => 5,4,3,2,1
字符串和可以快樂(一些其他選項會更快...但是這是很容易的)
var @is = 987654321.ToString().Select(c => c - 48).ToArray();
出於好奇:那會有什麼好處? – Tomalak 2009-05-06 11:59:06
爲什麼「沒有迭代字符」? – Kamarey 2009-05-06 12:07:38
打我吧,呵呵 – 2009-05-06 12:07:41