这是代码。它只是从数组中删除了一半重复元素,而其他元素则保留在那里。不知道是什么问题。需要帮助谢谢。
int[] count_list = { 10, 20, 10, 30, 30, 40, 20, 50, 90, 60, 80, 70, 80, 90 };
int l = count_list.Length;
for (int i = 0; i < l; i++)
{
for (int j =i + 1; j < l;)
{
if(count_list[j] == count_list[i]){
for (int k = j; k < l; k++)
{
count_list[k] = count_list[k + 1] ;
l--;
}
}
else{
j++;
}
}
}
for (int i = 0; i < count_list.Length; i++)
{
Console.WriteLine(count_list[i]);
// Console.WriteLine("name");
}
答案 0 :(得分:1)
问题是你在每次迭代最内部l
循环时递减for
。尝试重写它:
for (int i = 0; i < l; i++)
{
for (int j = i + 1; j < l;)
{
if(count_list[j] == count_list[i]){
l--;
for (int k = j; k < l; k++)
{
count_list[k] = count_list[k + 1] ;
}
break;
}
else{
j++;
}
}
}
如果你想在最后缩小数组,请记得调用Resize
:
Array.Resize(ref count_list, l);
然而,这是很多不必要的工作。我强烈建议使用HashSet<T>
或Linq的Distinct
扩展方法:
count_list = count_list.Distinct().ToArray();
答案 1 :(得分:0)
您可以使用Distinct
方法生成一个没有重复项的新数组;
int[] noDupes = count_list.Distinct().ToArray();
答案 2 :(得分:0)
您可以使用Distinct方法:
var newArray = oldArray.Distinct().ToArray();
这显然会创建一个新数组,而不是编辑原始数组。