我正在尝试找到两个集合之间的交集,匹配的数字将进入一个新集合,但我的代码无效。
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;
}
答案 0 :(得分:0)
如果这是作业,这可能不会帮助你。但除此之外,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
直接致电。
当然,请注意,这并不依赖于它们处于相同的顺序,因为它看起来像你的尝试。我认为这不是故意的,因为这会带来一些你无法解决的逻辑上的困难。
除此之外,我真的需要有关这些要求的更多信息。你的头衔并没有多大意义,所以我对你所喜欢的事情做了一些假设,这可能不正确。
答案 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;
}