私は、オブジェクトのリストで重複をチェックする本当に高速な方法を探しています。オブジェクトのリストの重複をチェックするC#
...私はオブジェクトがあるとし...私は単にリストをループして手動で比較をそのようにやって考えていたが、私は、LINQは、よりエレガントな解決策を提供するかもしれないと思いました
public class dupeCheckee
{
public string checkThis { get; set; }
public string checkThat { get; set; }
dupeCheckee(string val, string val2)
{
checkThis = val;
checkThat = val2;
}
}
そして私は、私はそのリストにdupesを見つける必要があり、それらのオブジェクトのリスト
List<dupeCheckee> dupList = new List<dupeCheckee>();
dupList.Add(new dupeCheckee("test1", "value1"));
dupList.Add(new dupeCheckee("test2", "value1"));
dupList.Add(new dupeCheckee("test3", "value1"));
dupList.Add(new dupeCheckee("test1", "value1"));//dupe
dupList.Add(new dupeCheckee("test2", "value1"));//dupe...
dupList.Add(new dupeCheckee("test4", "value1"));
dupList.Add(new dupeCheckee("test5", "value1"));
dupList.Add(new dupeCheckee("test1", "value2"));//not dupe
を持っています。私がそれを見つけると、私はいくつかの追加ロジックを行う必要があります 必ずしもそれらを削除する必要はありません。
私はLINQを使用すると、私のGROUPBYが例外をスローする方法をいくつか...
'System.Collections.Generic.List<dupeCheckee>' does not contain a definition for 'GroupBy' and no extension method 'GroupBy' accepting a first argument of type 'System.Collections.Generic.List<dupeCheckee>' could be found (are you missing a using directive or an assembly reference?)
私は、ライブラリをしないのですと私に語っている
。私は苦労してどれを考え出しているのですか。
一度私はそれを理解したら、どのように本質的にそれらの2つの条件をチェックするのでしょうか... IE checkThisとcheckThatはどちらも複数回出現しますか?
UPDATE:私はこれは私が迅速な研究を行った後、思い付いたLINQクエリで
思い付いた...
test.Count != test.Select(c => new { c.checkThat, c.checkThis }).Distinct().Count()
これは間違いなく優れているかどうかは定かでありませんよこの答えよりも...
私は最初の文をif else節に入れることができます。私はまた、迅速なテストを実行しました。重複リストは、私が0を期待していたときに私に戻ってきましたが、私が使用したセットの1つに重複があったという事実を正しく示しました。
List<DupeCheckee> test = new List<DupeCheckee>{
new DupeCheckee("test0", "test1"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test1", "test2"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test2", "test3"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test3", "test3"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test0", "test5"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test1", "test6"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test2", "test7"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test3", "test8"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test0", "test5"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test1", "test1"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test2", "test2"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test3", "test3"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test4", "test4"),//{ checkThis = "test", checkThat = "test1"}
};
んdupes ...
List<DupeCheckee> test2 = new List<DupeCheckee>{
new DupeCheckee("test0", "test1"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test1", "test2"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test2", "test3"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test3", "test3"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test4", "test5"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test5", "test6"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test6", "test7"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test7", "test8"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test8", "test5"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test9", "test1"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test2", "test2"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test3", "test3"),//{ checkThis = "test", checkThat = "test1"}
new DupeCheckee("test4", "test4"),//{ checkThis = "test", checkThat = "test1"}
};
csファイルの先頭に 'using System.Linq;'を追加すると 'GroupBy'が動作します。 –
ちょうど私がそれを見逃していたことがわかった。ありがとう。 – SoftwareSavant
Ermいいえdupesにはdupe test3、test3がありません –