2014-02-11 123 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