2014-08-28 74 views
0

我有一個四個數字的數組,我需要將它與另一個數字數組進行比較。我應該告訴這些數字中有多少是正確的,有多少是正確的數字,但不是正確的。一種縮短if語句的方法

F.eks: 
Code: 1501 
Guess: 1305 
Right numbers: 3 
Right placement: 2 

正確的位置很容易。但是正確的數字部分有點棘手。這就是我解決它的方法:

//Check if number exist in context 
     Rn = 0; 

     for (int g = 0; g < 4; g++) 
     { 
      resent[g] = 6; 
     } 

     for (int i = 0; i < 4; i++) 
     { 
      for (int j = 0; j < 4; j++) 
      { 
       if 
        (
         guess[i] == Numbers[j] 
        && guess[i] != resent[0] 
        && guess[i] != resent[1] 
        && guess[i] != resent[2] 
        && guess[i] != resent[3] 
        ) 
       { 
        Rn++; 
        resent[i] = guess[i]; 
       } 
      } 

     } 
     ConsolePost("Right Numbers: " + Rn); 

有沒有一種方法可以做到這一點。或者是否有可能縮短這個?

像:

if(guess[i] == Numbers[j] && != resent[0-3]) 
{ 
    Something; 
} 
+5

這應該是對代碼評審:http://codereview.stackexchange.com/ – 2014-08-28 15:20:42

+2

'猜[I] ==編號[j]的&& resent.Take(4)。所有(R => R != guess [i])'如果'resent' ***的長度是*** 4,那麼你可以跳過呼叫'.All' – spender 2014-08-28 15:21:34

+0

雖然有很好的想法,但我認爲你會把奧斯卡與所有這些方法混淆。確保他知道這些擴展方法和lambda等等。看看他提供的代碼。對我來說似乎是一個基本的代碼。 – VasileF 2014-08-28 15:24:31

回答

2

您可以使用Enumerable.Take(4),幷包含您的resent像:

!resent.Take(4).Contains(guess[i]) 

你的支票可能是:

if(guess[i] == Numbers[j] && !resent.Take(4).Contains(guess[i])) 

參見:Enumerable.Take<TSource> Method

從 序列的開頭處返回指定數量的連續元素。

如果resent大小始終是4,那麼你可以跳過Take(4),而是隻使用Contains像:

if(guess[i] == Numbers[j] && !resent.Contains(guess[i])) 
+0

@Matthew,是的,謝謝:) – Habib 2014-08-28 15:19:11

+0

如果'resent []'總是大小爲4,那麼當然可以省略'.Take(4)'。 – 2014-08-28 15:22:05

+0

@MatthewWatson,是的,我應該補充說我的回答 – Habib 2014-08-28 15:24:15

5

你可以用任何()來檢查,如果你想改變你的數組的大小:

!resent.Any(c=>c==guess[i]) 
+0

哈哈^^這個人工作謝謝你。但不是我所需要的^^ – RakNoel 2014-08-28 19:26:02