我有两个数组:{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。
是否有更好(更快)的方法?
答案 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
仅选择X
和Y
相等的元组来实现。
您需要确保您有对System.ValueTuple
程序集的引用,此功能才能起作用。