在两个数组中找到相同的数字并将其放入新数组中
本文关键字:数组 新数组 数字 两个 | 更新日期: 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();
}
我保留了sizeA
和sizeB
,将所有内容都保留为数组,尽管我会将它们取出并更改为生产中的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;
}