私は今、私は類似性(ないEXACTマッチ)条件によって、オーディオのリストの重複をフィルタリングするクラスに.NET(個別)と複雑なconditons
public class Audio
{
public string artist { get; set; }
public string title { get; set; }
// etc.
}
を持っていると仮定します。基本的には、弦全体の長さによるスレッショルド修正を伴うLevenstein距離です。問題は、IEqualityComparerについての一般的なヒントは「常にGetHashCodeとCompareの両方を実装する」ことです。私は明らかにGetHashCodeの文字列間の距離を計算することはできません。なぜなら、これは比較メソッドではないからです。しかし、この場合でも同様のオーディオでさえ異なるハッシュを返し、Distinct()はそれを別のオブジェクトとして扱い、compare()メソッドは起動しません。
GetHashCodeが常に0を返すようにしたので、コレクション内の各オブジェクトへの比較が呼び出されましたが、これは遅いです。だから最後に、質問:ボックスの外で.netを使ってできることは何か、またはフィルタリングのための良いアルゴリズムを検索する必要がありますか?
「Distinct」を乱用している可能性があります。例えば、 'ab'は' bc'の複製であり、 'bc'は' cd'の複製であると考えるかもしれませんが、 'ab'は' cd'の複製であるとは考えません。これにより、「Distinct」はあなたのためには機能しません。 – Gabe
ありがとう、ガベ、私はそれについて考えなかった。私は検索アルゴリズムについての良い本を読むだけでよいはずです。 – Tommi
オブジェクトの静的で長いリストがある場合 - BKツリーを見て、あなたが達成しようとしているものを多く手助けすることができます。私はF#の実装を書いたことがありますが、それはあなたの目標にはかなり役立ちます。任意のオブジェクトをその中に格納し、セレクタ関数によって任意のプロパティのlevenshteinと比較することができます。興味があれば、コードをbitbucketにアップロードできます。 – rkrahl