删除数组中的重复项

时间:2014-02-11 23:09:40

标签: c# arrays loops duplicates elements

这是代码。它只是从数组中删除了一半重复元素,而其他元素则保留在那里。不知道是什么问题。需要帮助谢谢。

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

3 个答案:

答案 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();

这显然会创建一个新数组,而不是编辑原始数组。

Original answer