获取相同索引处相同元素的数量

ub3*_*t4r 4 c# linq arrays c#-4.0

我有两个数组(两个长度相同),我试图迭代两个数组中的每个元素,并测试这些元素(具有相同的索引)是否相等.我想得到相等的数字和不相等的数字.我已经能够使用while循环来完成它,但我想知道是否有更快的System.Linq扩展方式?

这就是我现在所拥有的:

    var list1 = new List<Color>
        {
            Color.Aqua,
            Color.AliceBlue,
            Color.Beige,
            Color.Red,
            Color.Green,
            Color.White
        };


        var list2 = new List<Color>
        {
            Color.Red,
            Color.BurlyWood,
            Color.Beige,
            Color.Azure,
            Color.Green,
            Color.Magenta
        };

        var enumFirst = list1.GetEnumerator();
        var enumSecond = list2.GetEnumerator();

        var equal = 0;
        var notEqual = 0;

        while (enumFirst.MoveNext() && enumSecond.MoveNext())
        {
            var colorFirst = enumFirst.Current;
            var colorSecond = enumSecond.Current;

            if (colorFirst == colorSecond)
                equal++;
            else
                notEqual++;
        }

        Console.WriteLine("Elements that are equal: " + equal);
        Console.WriteLine("Elements that are not equal: " + notEqual); 
Run Code Online (Sandbox Code Playgroud)

输出是:

Elements that are equal: 2
Elements that are not equal: 4
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 7

是的,使用Zip.

var equal = list1.Zip(list2, (l1, l2) => l1 == l2).Count(x => x);
var notEqual = list1.Count() - equal;
Run Code Online (Sandbox Code Playgroud)

Zip 将跳过所有剩余元素,如果其中一个列表没有更多要枚举的元素(列表具有不同数量的元素):

如果输入序列不具有相同数量的元素,则该方法组合元素直到它到达其中一个序列的末尾.