C# 数字到具有可变填充量零的数字数组

C# 数字到具有可变填充量零的数字数组,c#,C#,我有一个函数,它获取一个数字和一个数字量,并且应该返回一个数字数组(或数组列表),该数组的大小正好是数字 样本输入1:12345,6 应输出:“012345” 样本输入2:123456,6 应输出:“123456” 样本输入3:1,8 示例输出:“00000001” 我现在正在做这个 public int[] digitArrayFromNumber(int number, int digits){ int[] result = number.ToString().PadLeft(dig

我有一个函数,它获取一个
数字
和一个
数字量
,并且应该返回一个数字数组(或数组列表),该数组的大小正好是
数字

样本输入1:12345,6
应输出:“012345”

样本输入2:123456,6
应输出:“123456”

样本输入3:1,8
示例输出:“00000001”

我现在正在做这个

public int[] digitArrayFromNumber(int number, int digits){
    int[] result = number.ToString().PadLeft(digits, '0').ToArray().Select(
        ch => Convert.ToInt32(ch.ToString())
    ).ToArray();
    return result;
}
但这看起来真的很难看,在我看来,可能有更好的可读性方法来做到这一点。

你可以使用数学:

int[] arr = new int[digits];
for (int i = 0; i < digits; i++)
{
    arr[digits - i - 1] = number % 10;
    number /= 10;
}
int[]arr=新整数[位数];
对于(int i=0;i

使用模运算符检索最后一个数字的值,然后除以10切掉最后一个数字。

要获取数字字符的数值,只需从中减去
'0'

int[] result = number.ToString("D" + digits).Select(i => i - '0').ToArray();

您可以对其进行更好的格式化并删除第一个
ToArray()
(不需要它,因为
字符串已经是
IEnumerable
),或者使用
int.Parse
,因为它较短

public int[] digitArrayFromNumber(int number, int digits)
{
    return number.ToString()
        .PadLeft(digits, '0')
        .Select(c => int.Parse(c.ToString()))
        .ToArray();
}

然而,@SLaks提供了一种更简单、更短的方法。

丑陋?这是藏在函数中的几行代码,您很少需要查看这些代码at@musefan丑陋的代码往往有很多bug,这就是为什么我已经第五次阅读这段代码了。