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

本文关键字:数组 新数组 数字 两个 | 更新日期: 2023-09-27 18:31:54

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

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; 
}

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

如果这是为了家庭作业,这可能对你没有帮助。但除此之外,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 调用。

当然,请注意,这并不取决于它们是否处于相同的顺序,因为看起来您的顺序是您的。我假设这不是故意的,因为这会带来一些你没有解决的逻辑困难。

除此之外,我真的需要有关要求的更多信息。你的标题并没有多大意义,所以我放弃了一些关于你想要什么的假设,这可能不正确。

这更干净一些:

int[] SetA = { 1, 2, 3, 4, 5 };
int[] SetB = { 1, 3, 5, 10 };
var Temp = SetA.Intersect(SetB);
int[] SetC = Temp.ToArray();

在第二个循环中,您将 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;
    }