如何获得2个字符串数组之间的第一个匹配

问题描述:

我有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" 

如果你只想要一个结果,使用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

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