我有一个函数,它获得number
和digits
的数量,并且应该返回一个数字的数组(或一个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;
}
但这看起来很丑陋,在我看来可能有更好的可读方式来做到这一点。
答案 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提供了一种更简单,更简短的方法。