私は「交差している」と思うことをしようとしています(私は正しい名前が何であるか分かりませんが、それはEpicGamesのTim Sweeneyがすぐにリストを作成する方法<T>。コンテナ()
// foo and bar have some identical elements (given a case-insensitive match)
List‹string› foo = GetFoo();
List‹string› bar = GetBar();
// remove non matches
foo = foo.Where(x => bar.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
bar = bar.Where(x => foo.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
その後、元のファイルから結果を差し引いて、削除した要素を確認します。これは超高速です.Except()を使用するので、そこにトラブルはありません。
これは、どちらのリストでも(文字列の)〜30,000個の要素でかなり悪い結果になるので、これを行うにはもっと速い方法が必要です。好ましくは、このステップを実行し、後に1つのステップを実行する方法は、すばらしいことになるだろう。私は.Contains()の代わりに.Exists()を使ってみましたが、やや遅くなりました。私は少し厚く感じますが、.Except()と.Intersect()や.Union()のいくつかの組み合わせで可能になるはずです。
なぜあなたは二回それをやっていますか?最初の比較はすべての試合を含むか?私が間違って理解していない限り。 – gcores
私は大文字と小文字を保持する必要があります。 基本的に、これはパスとファイル名のケースを同期、および両側の非一致するエントリを無視することができる自動ディレクトリ比較プログラムのためのものです。 –