在两个数组中找到相同的数字并将其放入一个新数组中

时间:2014-11-26 01:58:41

标签: c# arrays numbers duplicates intersection

我正在尝试找到两个集合之间的交集,匹配的数字将进入一个新集合,但我的代码无效。

public static int intersection (int[] setA, int sizeA, int[]
    setB, int sizeB, int[] resultSet) 
{
    int copies = 0;

    for(int count = 0; count < sizeA; count++) 
    {
        for(int x= 0; count < sizeB; x++) 
        {
            if(setA[count] == setB[x])
            {
                resultSet[copies] = setB[x]; 
                copies++;
            }
        }
    }
    return copies; 
}

3 个答案:

答案 0 :(得分:0)

如果这是作业,这可能不会帮助你。但除此之外,LINQ将非常好地做到这一点。

public static int[] intersection (int[] setA, int sizeA, int[] setB, int sizeB)
{
    return setA.Take(sizeA).Intersect(setB.Take(sizeB)).ToArray();
}

我离开sizeAsizeB并将所有内容保留为数组,但我会将其删除并在生产中将其更改为IEnumerable<int>,或者更好地使用Intersect直接致电。

当然,请注意,这并不依赖于它们处于相同的顺序,因为它看起来像你的尝试。我认为这不是故意的,因为这会带来一些你无法解决的逻辑上的困难。

除此之外,我真的需要有关这些要求的更多信息。你的头衔并没有多大意义,所以我对你所喜欢的事情做了一些假设,这可能不正确。

答案 1 :(得分:0)

这有点清洁:

int[] SetA = { 1, 2, 3, 4, 5 };
int[] SetB = { 1, 3, 5, 10 };

var Temp = SetA.Intersect(SetB);

int[] SetC = Temp.ToArray();

答案 2 :(得分:0)

在第二个循环中,您在数组长度之外增加x,因此根据以下更改代码应该可以解决这个问题:

public static int intersection(int[] setA, int sizeA, int[] setB, int sizeB, int[] resultSet)
    {
        int copies = 0;

        for (int count = 0; count < sizeA; count++)
        {
            for (int x = 0; x < sizeB; x++)
            {
                if (setA[count] == setB[x])
                {
                    resultSet[copies] = setB[x];
                    copies++;
                }
            }
        }
        return copies;
    }