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

时间:2014-01-20 16:51:12

标签: c#

我有一个函数,它获得numberdigits的数量,并且应该返回一个数字的数组(或一个ArrayList),其数量正好是digits

样本输入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;
}

但这看起来很丑陋,在我看来可能有更好的可读方式来做到这一点。

3 个答案:

答案 0 :(得分:7)

您可以使用数学:

int[] arr = new int[digits];
for (int i = 0; i < digits; i++)
{
    arr[digits - i - 1] = number % 10;
    number /= 10;
}

使用模数运算符检索最后一位数的值,然后除以十来切断最后一位数。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

你可以更好地格式化它并删除第一个ToArray()(由于string已经是IEnumerable<char>而不需要),也许使用int.Parse它更短,因此,

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

但是,@ slaks提供了一种更简单,更简短的方法。