2009-05-06 32 views
11

說我有是否有一種簡單的方法可以將int轉換爲每個數字的整數數組?

var i = 987654321; 

有一種簡單的方法來獲得的數字數組中,

var is = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1 }; 

相當於沒有.ToString() ING和遍歷與int.Parse(x)的字符?

+2

出於好奇:那會有什麼好處? – Tomalak 2009-05-06 11:59:06

+0

爲什麼「沒有迭代字符」? – Kamarey 2009-05-06 12:07:38

+0

打我吧,呵呵 – 2009-05-06 12:07:41

回答

21
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(); 
} 
2

簡而言之:使用環,其分割數模10(%),以獲得催(每個數字),並把它放入陣列。

4
var x = new Stack<int>(); 
do 
{ 
    x.Push(i % 10); 
    i /= 10; 
} while (i > 0); 
return x.ToArray(); 
5

哪些沒有另一種方法使用遞歸和使用,從而避免每次插入再分配堆棧(至少前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}

更新:使用列表來切換因爲這個堆棧會自動給出正確的順序。

-2

這並轉換​​爲字符串,並遍歷字符,但它可以自動進行排序,並在一個班輪:

var i = 987654321; 
var is = i.ToString().Cast<int>().ToArray(); 
11

我知道還有比這可能是更好的答案,但這裏是另一個版本:

您可以使用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

1

字符串和可以快樂(一些其他選項會更快...但是這是很容易的)

var @is = 987654321.ToString().Select(c => c - 48).ToArray(); 
相關問題