私は現在、オブジェクトの私のリストの特性の一つに指定した重複する値を持つリストから項目を削除するクリーン、最もパフォーマンスの道を見つけようとしています。のは、私は潜在的にエントリの数千人が含まれているList<MyModel> models
を持っているとしましょう、今C#の異なるフィールドに基づいてリストからエントリを削除
public class MyModel
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public string PropertyC { get; set; }
}
:以下の例を参照してください。私は、PropertyBが同じであるもの(最初のもの)以外のすべてのエントリを削除できるようにしたいと思います。
私はこれを行うことを考えてきた唯一の方法は、パフォーマンスにかなり課税のようだと私は別のway-現在の考え方は以下の通りです見つけるしたいと思います:
List<MyModel> models = //initialized externally, contains thousands of records
List<MyModel> noDuplicatePropertyBs = new List<MyModel>();
List<string> propertyBs = new List<string>();
foreach(var model in models)
{
if(!propertyBs.Contains(model.PropertyB))
{
noDuplicatePropertyBs.Add(model);
propertyBs.Add(model.PropertyB);
}
}
編集:私は考えていることに注意してください私はMyModel
クラスの基本Equalsメソッドをオーバーライドして、PropertyBを.Distinct()メソッドを使って比較することができますが、プロジェクトの他の多くの部分に必要なオーバーライドEqualsメソッドを既に持っています(この目的のequalsメソッドをオーバーライドしません)ビジネスロジックが賢明なので良いアイデアのように思えますが、オブジェクトは3つのプロパティをすべて同じにする必要があります)
あなたはLINQを使用する必要があります。詳細については、ドキュメントをチェックしてください。 –
特に重複した質問に対する回答を確認してください。そのメソッドをコードにドロップするか、またはMoreLinq NuGetを追加するだけで、以下のことができます: 'var noDuplicatePropertyBs = models.DistinctBy(m => m.B);' –