繁体   English   中英

查找数组之间匹配数的最快方法是什么?

[英]What is fastest way to find number of matches between arrays?

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

您可以使用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++;
    }
}

使用HashSet

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM