2013-05-13 34 views
1

我有2個字符串數組。一個是基地,另一個正在改變。如何獲得2個字符串數組之間的第一個匹配

string[] baseArray = { "Gold", "Silver", "Bronze" }; 
string[] readArray = { "Bronze", "Silver", "Gold" }; 

// After comparing the readArray over the baseArray the result should be this 
//string match = "Gold"; 

我想獲得第一個按照baseArray的順序。

//Example2 
string[] readArray = { "Bronze", "Silver" }; 
//string match should be "Silver" 

回答

5

如果你只想要一個結果,使用LINQ:

string firstMatch = baseArray.FirstOrDefault(readArray.Contains); 

如果你只想要一個結果,而不是使用LINQ:

string firstMatch = null; 
foreach(string element in baseArray) 
{ 
    if (Array.IndexOf(readArray, element) >= 0) 
    { 
     firstMatch = element; 
     break; 
    } 
} 

如果希望所有匹配的元素,使用LINQ:

string[] common = baseArray.Intersect(readArray).ToArray(); 

如果您想要al升匹配元素,不使用LINQ:比我

HasSet<string> common = new HashSet<string>(readArray); 
result.Intersect(baseArray); 
+0

1更好的解決方案。不過,我最終會做一個'FirstOrDefault()'。 – 2013-05-13 20:42:35

+0

他希望第一場比賽不是全部。 – 2013-05-13 20:46:02

+0

@Tim:我糾正了我的答案。 – 2013-05-13 20:47:08

1
var match = baseArray.FirstOrDefault(x => readArray.Contains(x)); 
+0

包含可能會給出錯誤的結果,也許我可以使用等於。 – Incognito 2013-05-13 20:46:33

+0

@Incognito'.Contains()'在幕後使用'.Equals()'。如果一個失敗了,那麼兩者都是。 – 2013-05-13 20:47:53

+0

@Incognito。爲什麼它應該失敗?由於文化? – 2013-05-13 20:51:05

相關問題