目前,我正在测试每个整数元素,以找出哪些匹配。数组在其自己的集合中不包含重复项。此外,阵列并不总是相等的长度。有什么技巧可以加快速度吗?我这样做了数千次,所以它开始成为我的程序的瓶颈,这是在C#中。
答案 0 :(得分:6)
您可以使用LINQ:
var query = firstArray.Intersect(secondArray);
或者如果数组已经排序,你可以自己迭代这两个数组:
int[] a = { 1, 3, 5 };
int[] b = { 2, 3, 4, 5 };
List<int> result = new List<int>();
int ia = 0;
int ib = 0;
while (ia < a.Length && ib < b.Length)
{
if (a[ia] == b[ib])
{
result.Add(a[ia]);
ib++;
ia++;
}
else if (a[ia] < b[ib])
{
ia++;
}
else
{
ib++;
}
}
答案 1 :(得分:5)
使用HashSet
var set = new HashSet<int>(firstArray);
set.IntersectWith(secondArray);
该集现在仅包含两个数组中存在的值。
答案 2 :(得分:0)
如果这样的比较是您程序中的瓶颈,那么您可能正在使用不适当的数据结构。最简单的方法可能是保持数据的排序。然后,为了找出公共条目,您只需要遍历两个数组。另一种选择是将数据保存在HashSet中。