質問

Im書を自分のLINQがーのトラブルにより複雑な事業者の実装方法です。

が参加実施にかかるIEqualityComparer ーで狂いにくくなっております。●

Im理解しようとなっていることが考えられた書(か)

画像のリスト:

List<string> initials = new List<string> {"A", "B", "C", "D", "E"};

List<string> words = new List<string> {"Ant", "Crawl", "Pig", "Boat", "Elephant", "Arc"};

何か。また、私は両方のリストによる初期のようなもの:

初期=A Word=Ant
初期=A Word=アーク
初期=B Word=ボート
...

いおり、コンパレータ、書いた本

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());

これに対し、今回のIm用ュー内の後、良いセッションのデバッグのいたように、これまでとは違ったすべてのコンパレータで、そのハッシュコードが別の単語と同じハッシュコードでequals.

たいので比較では、当初私はもう必要性のハッシュ文字(か)

ものであることがうまくいきません。そのう"Ant"や"Arc"のequals、Ok、その比較はすべて同じリストではないですが、追加しみにできるようにするためのlibsoupお、この場合にアークを無視してAnt、Antは、equalsの"A"---。

を置い"Ant"と"Ant"で追加します。

にのって何かをするのはいけないと思います。知っているImって何かをするのが間違っている。

お願い致します。

役に立ちましたか?

解決

クリスピーは、tryを述べたように     X [0] == Y [0] の代わりに     x.StartsWith(Y)。 それは私のために働いています。

他のヒント

あなたが実際にはそうのような個々の文字に参加し、独自の等値比較子を必要としません。

var mine = from i in initials
     join w in words on i[0] equals w[0]
     select new {
          Initial = i,
          Words = w
     };

私は確かに、なぜあなたはこの動作を見ているではないんだけど、私はもっと簡単な方法だろう「SelectMany」を使用して考えると、(もっと重要なのは)あなたが望む行動があります:

var blah =
    from word in words
    from initial in initials
    where (word.StartsWith(initial))
    select new { Initial = initial, Word = word };

私は可能な限り理解の構文を使用することを好みます。 「SelectManyは」理解クエリ内の句「から」が複数あるときに呼び出されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top