如何在c#

时间:2019-01-08 13:17:38

标签: c# arrays compare

我有两个数组:{1、2、3、4、5}和{1、3、3、6、5}。

要找出很多相似(在相同位置)的物品,我这样做:

int[] a = new int[5] {1, 2, 3, 4, 5};
int[] b = new int[5] {1, 3, 3, 6, 5};
int count = 0;
for(int i = 0; i < 5; i++)
{
    if(a[i] == b[i])
      count++;
}
Console.Write(count);

这将得出结果3。

是否有更好(更快)的方法?

2 个答案:

答案 0 :(得分:1)

Linq Zip()是一种方式

int equalElements = a.Zip(b, (i, j) => i == j).Count(eq => eq);

答案 1 :(得分:0)

Zip解决方案为基础,但为了提高可读性,有:

int[] a = new int[5] {1, 2, 3, 4, 5};
int[] b = new int[5] {1, 3, 3, 6, 5};

var count = a.Zip(b, (x, y) => (X : x, Y : y))
            .Where(t => t.X == t.Y)
            .Count();

这可以通过将两个数组组合成一个元组(X, Y)的单个序列,然后使用Where仅选择XY相等的元组来实现。

您需要确保您有对System.ValueTuple程序集的引用,此功能才能起作用。