在两个List <string> </string>中查找不同的匹配项

时间:2015-02-06 16:25:13

标签: c#

我是C#的新手并且已经到处寻找过这个但是如果已经被问到的话就找不到答案。我正在尝试使用for循环来比较2个列表:

IList<string> List1 = new List<string> { usr.User1, usr.User2, usr.User3, usr.User4 };

IList<string> List2 = new List<string>{ "Tim", "Bob", "Brian", "Paul" };

基本上我希望只有4种可能的匹配,所以只有这些可能的匹配才算数:

usr.User1 == "Tim", // e.g. User1 has to be Tim etc.
usr.User2 == "Bob", 
usr.User3 == "Brian", 
usr.User4 == "Paul"

理想情况下,我希望返回一个值为0-4的int,所以如果上面的所有匹配都成功,那么它将返回4,如果没有匹配成功则返回0等。

我试过了:

 int score = 0;

 for (int i = 0; i <= List2.Count; i++)
 {
    if (List1[i] == List2[i]) 
    {
        score++;
    }
 } 

但目前正在获取IndexOutOfRangeException。非常感谢。

3 个答案:

答案 0 :(得分:5)

删除=,你想要停止上限。

for (int i = 0; i < List2.Count; i++)

另一种选择是使用zip linq

int score = List1.Zip(List2, (a,b) => a == b ? 1 : 0).Sum();

答案 1 :(得分:2)

丢失=它应该是for (int i = 0; i < List2.Count; i++)

虽然可能有更好的方法。

答案 2 :(得分:0)

由于List2有4个元素,List2.Count将等于4。

当您在for循环中创建i <= List2.Count语句时,您允许循环索引0-4,因为Lists是0索引库,当循环到索引4时,IndexOutOfRangeException异常会被抛出。

解决方案是将for循环中的<=语句更改为<