2011-12-13 33 views
2

我試圖與列表功能。 這是排序和刪除重複。 它排序很好,但不要刪除重複項。 什麼問題?不能在C#中進行簡單的列表操作

void sort_del(List<double> slist){ 
     //here i sort slist 
     //get sorted with duplicates 

     List<double> rlist = new List<double>(); 
     int new_i=0; 
     rlist.Add(slist[0]); 
     for (i = 0; i < size; i++) 
     { 
      if (slist[i] != rlist[new_i]) 
      { 
       rlist.Add(slist[i]); 
       new_i++; 
      } 

     } 

     slist = new List<double>(rlist); 
     //here get without duplicates 
    } 

回答

7

因爲slist是按值傳遞它不工作。將rlist分配給它對呼叫者的結束沒有影響。你的算法檢測重複似乎很好。如果您不想在另一個答案中使用更優雅的LINQ方式,請更改方法以返回您的列表:

List<double> sort_del(List<double> slist){ 
    // Do your stuff 
    return rlist; 
} 
4

double你可以使用Distinct()

slist = new List<double>(rlist.Distinct()); 

或可能:

slist.Distinct().Sort(); 
+0

除非LINQ到對象庫能做的查詢優化,slist.Sort()。鮮明的()會更好。 – tster 2011-12-13 17:04:33

+0

見我在想,排序較少的對象將是更快 – Joe 2011-12-13 17:06:31

0

您沒有修改基礎列表。您正在嘗試添加到新的集合中,而您並未檢查新的集合是否正確包含舊集合。

如果你被要求做這樣的家庭作業(看起來很可能,因爲有數據結構和簡單的方法來與其他人指出的LINQ做到這一點),你應該打破排序和刪除重複分成兩個獨立的方法。刪除重複項的方法應該接受一個列表作爲參數(就像這樣),並返回新的列表實例而不重複。