如何在两个字符串数组上使用Linq或lambda操作获得不匹配的位置

时间:2014-07-20 17:57:28

标签: c# linq lambda

string[] list1 = { "a", "c", "b", "d", "f", "e" };
string[] list2 = { "a", "c", "b1", "d1", "f", "e" };

有没有什么方法可以比较字符串数组并获得与linq或lambda表达式不匹配的位置。

这里我期待第2和第3位不匹配(b不等于b1,d不等于d1)

3 个答案:

答案 0 :(得分:4)

var mismatches = Enumerable.Range(0, Math.Min(list1.Length, list2.Length))
                           .Where(i => list1[i] != list2[i])
                           .ToList();

答案 1 :(得分:2)

如果两个列表中的元素计数相同,则可以执行

var result = list1.Where((x,idx) => x != list2[idx]);

答案 2 :(得分:0)

我试图提出更简单的解决方案,在这里我得到了:

var mismatchIndexes in list1.Except(list2)
            .Where(s => list1.First() == list2.First())
            .Select(s => Array.IndexOf(list1, s)).ToList();

当数组中的前两个元素(list1,list2)不同时,没有输出,并且给定的示例输出为2和3