5

目前,我正在测试每个整数元素,以找出匹配的元素。数组在它们自己的集合中不包含重复项。此外,数组并不总是相等的长度。有什么技巧可以加快速度吗?我这样做了数千次,所以它开始成为我的程序中的瓶颈,这是在 C# 中。

4

3 回答 3

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++;
    }
}
于 2010-04-10T19:00:35.877 回答
5

使用哈希集

var set = new HashSet<int>(firstArray);
set.IntersectWith(secondArray);

该集合现在仅包含两个数组中都存在的值。

于 2010-04-10T18:51:19.927 回答
0

如果这样的比较是您程序中的瓶颈,那么您可能使用了不适当的数据结构。最简单的方法可能是保持数据排序。然后为了找出共同的条目,您只需要遍历两个数组一次。另一种选择是将数据保存在 HashSet 中。

于 2010-04-10T19:01:57.953 回答