2014-02-11 34 views
0

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

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

可能重复(http://stackoverflow.com/questions/2055668/delete-duplicate-from-an-array) – atoMerz

+0

这个问题没有显示出任何调试的证据努力。 –

回答

1

的问题是,你正在递减l在每次迭代内最for -loop。请尝试重写这样的:

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(); 
+0

谢谢你的帮助。 – user3299370

0

您可以只使用Distinct方法产生不重复的新数组;

int[] noDupes = count_list.Distinct().ToArray(); 
0

你可以使用DISTINCT方法来代替:

var newArray = oldArray.Distinct().ToArray(); 

这显然创造,而不是编辑原始一个新的阵列。的[删除从数组重复]

Original answer