2016-07-06 21 views
0

我需要檢查一個char數組並將每個char轉換爲一個int數組;將很多if轉化爲更小的東西

我設法做到了這一點,但有很多代碼。 無論如何,我可以寫更少的代碼?

for (int i = 0; i < 8; i++) 
     { 
      if (oddF[i] == '0') 
      { 
       oddFlValue[i] = 1; 
       continue; 
      } 
      else if (oddF[i] == '1') 
      { 
       oddFValue[i] = 0; 
       continue; 
      } 
      else if (oddFiscal[i] == '8') 
      { 
       oddFiscalValue[i] = 19; 
       continue; 
      } 
      else if (oddF[i] == '9') 
      { 
       oddFValue[i] = 21; 
       continue; 
      } 
      else if ((oddF[i] == 'a') || (oddF[i] == 'A')) 
      { 
       oddFValue[i] = 1; 
       continue; 
      } 
      else if ((oddF[i] == 'b') || (oddF[i] == 'B')) 
      { 
       oddFValue[i] = 0; 
       continue; 
      } 

這只是一個示例,因爲我需要檢查每個數字和字母類型。 謝謝!

+3

你爲什麼不使用switch語句?另外,「繼續」是不必要的,因爲如果沒有更多的事情可以自動進行下一次迭代。 –

+1

'oddFiscal'是一個錯字嗎? – LarsTech

+0

你說你需要存儲隨機整數值,但我在這裏看不到隨機數。 –

回答

1

我認爲最簡單的方法是使用Dictionary<char, int>並獲得它的價值。事情是這樣的:

Dictionary<char, int> MyCombinations = new Dictionary<char, int>{ 
    {'0', 1}, 
    {'5', 15}, 
    /*etc etc etc*/ 
}; 

,然後用它喜歡:

for (int i = 0; i < 8; i++) 
{ 
    oddFValue[i] = MyCombinations[oddFiscal[i]]; 
} 
+0

我只會改變你實例化字典的方式爲{{a,b},{c,d}},但這是最簡單的解決方案 – MistyK

+0

@cFrozenDeath這個字典事情似乎是一個很好的解決方案! – Apollyon04

+0

@abelenky您好像是個不錯的人 –

0
class Program 
{ 
    static void Main(string[] args) 
    { 
     char[] oddF   = new char[8]{'0','1','8','A','b','9','a','B'}; 
     int[] oddFValue  = new int[8]; 

     Dictionary<char, int> table = new Dictionary<char, int>(){ 
      { '0', 1 }, 
      { '1', 0 }, 
      { '8', 19 }, 
      { '9', 21 }, 
      { 'a', 1 }, 
      { 'A', 1 }, 
      { 'b', 0 }, 
      { 'B', 0 } 
     }; 

     for (int i = 0; i < 8; i++) 
     { 
      oddFValue[i] = table[oddF[i]]; // Lookup which function should be called, and call it. 
     } 
    } 
} 
+0

當OP剛剛進行靜態分配時,我並沒有真正明白創建委託和所有這些。似乎工作太多,沒有實際的收益 –

+0

我不太喜歡這個想法。我同意@cFrozenDeath這太複雜了。爲什麼不用簡單的映射創建一個簡單的字典?順便說一句,程序應該在循環之外 – MistyK

+0

問題是我該如何編寫更少的代碼。我認爲這會減少代碼。 (我正在製作一個更短的版本) – abelenky

-1

如何:

public int? ConvertCharToInt(char c) 
{ 
    switch (c) 
    { 
     case '0': return 1; 
     case '1': return 0; 
     case '8': return 19; 
     case '9': return 21; 
     case 'a': 
     case 'A': return 1; 
     case 'b': 
     case 'B': return 0; 
     // ... 
     default: return null; 
    } 
} 

然後:

for (int i = 0; i < 8; i++) 
{ 
    int? number = ConvertCharToInt(oddF[i]); 
    if (number.HasValue) 
     oddFValue[i] = number.Value; 
    else 
     // Character cannot be converted to int value 
} 
+0

原來的帖子也改變了哪個數組***接收***作業。有時它是'oddFlValue',有時是'oddFiscalValue',有時是'oddFValue'。您的解決方案不會捕獲該部分***。 – abelenky

+0

@abelenky OP表示這是一個錯字。它始終是相同的數組。查看接受的答案和評論。爲什麼downvotes? –

相關問題