独自の LINQ リファレンスを作成していますが、より複雑な演算子の実装で問題が発生しています。
IEqualityComparer を使用する Join 実装があります。
書く前にまずそれを理解しようとしています(明らかに)
この2つのリストをイメージしてください:
List<string> initials = new List<string> {"A", "B", "C", "D", "E"};
List<string> words = new List<string> {"Ant", "Crawl", "Pig", "Boat", "Elephant", "Arc"};
ここで奇妙なことは何もありません。次のようなイニシャルで両方のリストに参加したい:
イニシャル=A ワード=アリ
イニシャル=A ワード=アーク
イニシャル=B ワード=ボート
...
私はコンパレータが必要です、私はこれを書きました:
public class InitialComparator : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.StartsWith(y);
}
public int GetHashCode(string obj)
{
return obj[0].GetHashCode();
}
}
結合自体:
var blah = initials.Join(words,
initial => initial,
word => word,
(initial, word) =>
new {Initial = initial, Word = word},
new InitialComparator());
HashCodes を使用するのは初めてです。デバッグの適切なセッションの後、すべての単語がコンパレーターに移動し、その HashCode を確認します。
イニシャルだけを比較したいので、最初の文字のハッシュだけが必要だと思います(間違っていますか?)
問題は、これが正しく機能していないことです。「Ant」と「Arc」は等しいと言われています。わかりました、同じリスト内のすべての単語を比較するかどうかですが、最後に見つかった単語のみを追加します。この場合、Arc で、Ant を無視し、Ant は「A に等しい」 " それも...
"Ant" と "Ant" を入力すると、両方が追加されます。
要するに、そのようなことをする方法は何ですか?私は何か間違ったことをしていることを知っています。
ありがとうございました。