2011-07-03 8 views
2

カスタム比較操作を使用してList<T>から重複を削除するにはC#メソッドが必要です。 .NET 4.そこに1つまたはそれを自分で書く必要がありますか?あなたの比較演算がIEqualityComparer<T>であるか、それに変換することができ、あなたはLINQと罰金だと仮定すると、リストから重複を削除するC#メソッド<T>

答えて

7

var newList = oldList.Distinct(customComparer).ToList(); 

明らかにそれは、むしろ1古いから要素を削除するよりも、新しいリストを作成しかし、ほとんどの場合、それは大丈夫です。うあなたは、常に完全にその後、新しいリストで古いリストの内容を置き換えることができない場合は...

+0

なぜ 'oldList = oldList.Distinct(customComparer).ToListを()しない;'新しいリストを作成しないようにMr.Skeetそれは悪いそれが動作しないでしょうか? – Bastardo

+4

@ JohnnyCageWins - それは新しいリストの作成を妨げません。古いリストに保持している参照を新しいリストへの参照で上書きします。 –

+0

@Jonas H何?真剣に?私は、古いリストを上書きするためにメモリフローが非常に間違っていると思います。私は 'oldList'を使用すると作成する必要はないと思いました。何か方法はありませんか?Mr.H 。 – Bastardo

6

をあなたがJon's answerで行くことができる、またはあなたが本当に既存リストから重複を削除したい場合は、このような何か作品は:??

public static void RemoveDuplicates<T>(this IList<T> list, IEqualityComparer<T> comparer = null) 
{ 
    comparer = comparer ?? EqualityComparer<T>.Default; 

    var uniques = new HashSet<T>(comparer); 
    for (int i = list.Count - 1; i >= 0; --i) 
    { 
     if (!uniques.Add(list[i])) 
     { 
      list.RemoveAt(i); 
     } 
    } 
} 
関連する問題