我有两个数组:{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。
有没有更好(更快)的方法可以做到这一点?
Linq Zip()
是一种方式
int equalElements = a.Zip(b, (i, j) => i == j).Count(eq => eq);
基于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
仅选择X
和Y
相等的元组来工作。
您需要确保具有对System.ValueTuple
程序集的引用才能使其正常工作。