2013-12-14 129 views
1

我有一個包含最少2個,最多10個字符串的簡單數組。字符串條目是固定的(WI,CT,CTRW,GF)。我需要比較這個數組的內容,看看它們是否完全相同。我的工作,只有如果陣列是2 - 3個元素的大小。如果它包含4個或更多元素,則即使不是這種情況,也會返回TRUE。我還沒有想出如何解決這個問題。我明白爲什麼它不起作用,但不知道如何解決這個問題。有什麼建議麼? (下面的代碼)如何檢查二維數組中的所有元素在C中是否相等#

for (int i = 1; i < numLogs; i++) 
{   
    if(logType[i-1] == logType[i]) 
    { 
    return true; 
    } 
} 

回答

4

您可以使用LINQ的一點:

return logType.Cast<string>().Distinct().Count() == 1; 
  • Cast<string>string[,]陣列的IEnumerable<string>轉換,所以你可以使用常規的LINQ擴展方法。
  • Distinct獲取列表中不同元素的集合。
  • Count返回上一組中的項目數。

這裏還有一個更有效,但略顯不足容易閱讀的解決方案:

return !logType.Cast<string>().Distinct().Skip(1).Any(); 
  • Cast<string>string[,]陣列的IEnumerable<string>
  • Distinct轉換得到一組不同元素的列表。
  • Skip(1)忽略上一組中的第一項。
  • Any回報true如果在上一組的任何項目
  • 最後,結果被否定與!(就是那個被跳過之後)。請注意,這意味着如果輸入數組爲空,該方法將返回true。

第二個解決方案效率更高,因爲它允許在找到第二個字符串時立即返回結果,而第一個必須繼續計數,直到找到所有不同的項目。

+0

太棒了!這工作完美。現在需要在LinQ上做更多的功課。 – Matchrocket

+0

@Matchrocket我很高興能幫上忙。如果這個答案解決了你的問題,你應該考慮接受它。這表示其他用戶已經解決了問題,並且可以幫助其他具有相同問題的訪問者知道此答案也可以幫助他們解決問題。一旦你贏得了足夠的聲譽,你也可以提出任何你認爲有用的答案。請參閱[當某人回答我的問題時該怎麼辦?](http://stackoverflow.com/help/someone-answers)。 –

相關問題