是否有一种简单的方法可以将int转换为每个数字的整数数组?

说我有

var i = 987654321; 

有一种简单的方法来获得数字的数组,相当于

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

没有.ToString()和使用int.Parse(x)迭代字符?

 public Stack NumbersIn(int value) { if (value == 0) return new Stack(); 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(); for(; value > 0; value /= 10) numbers.Push(value % 10); return numbers.ToArray(); } 

我知道可能有更好的答案,但这是另一个版本:

您可以使用yield return以升序返回数字(根据权重或其他任何方式)。

 public static IEnumerable Digits(this int number) { do { yield return number % 10; number /= 10; } while (number > 0); } 

12345 => 5,4,3,2,1

另一种不使用递归并使用Stack的替代方法,避免在每个插入时重新分配(至少对于前32位):

 var list = new Stack(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 x = new Stack(); do { x.Push(i % 10); i /= 10; } while (i > 0); return x.ToArray(); 

简而言之:使用循环将数字模10(%)除以得到提醒(每个数字)并将其放入数组。

字符串和乐趣(一些其他选项会更快……但这很容易)

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

这确实转换为字符串并迭代字符,但它会自动排序并在单行中:

 var i = 987654321; var is = i.ToString().Cast().ToArray();