2014-01-20 80 views
3

我有一個函數獲取number和數量爲digits,並且應該返回一個數組中的數字的數組(或ArrayList),其大小正好爲digits可變數量的填充爲零的數組的數組數

樣品輸入1:12345,6
應該輸出: 「」

樣品輸入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; 
} 

但這看起來確實很難看,而且在我看來,這可能會有更好的可讀性。

+4

醜嗎?這是幾行代碼隱藏在一個函數中,你很少需要看看 – musefan

+0

@musefan醜陋的代碼往往有很多的錯誤,這就是爲什麼我已經讀了第5次這個代碼。 – FlyingFoX

回答

7

您可以使用數學:

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

使用模運算十來檢索最後一位的值,再除以砍掉最後一位。

+0

+1出色聰明。 – rae1

3

要獲取數字字符的數字值,您可以簡單地從中減去'0'

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

+1巧妙的技巧'我 - '0'' – rae1

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提供了一個更簡單,更短的方法。