1

私は次の辞書を持っています:

Dictionary<int, List<TypeA>> dict

そしてオブジェクトを追加しました:

dict.Add(1, new List<TypeA>{TypeA.1, TypeA.2, TypeA.3};
dict.Add(11, new List<TypeA>{TypeA.2, TypeA.6, TypeA.7};
dict.Add(23, new List<TypeA>{TypeA.3, TypeA.4, TypeA.9};

1 行の構文 (ラムダ) を使用して、辞書全体で TypeA.3 を見つけるにはどうすればよいですか?

これは、bool を返すメソッドにカプセル化されます。true == 一致し、false == 一致しません。上記はtrueを返します。

4

2 に答える 2

1

どこかに存在するかどうかを確認しようとしているだけの場合はTypeA.3、次を使用できます。

bool exists = dict.Values.Any(v => v.Any(t => t == TypeA.3));
于 2013-06-12T23:28:22.180 に答える
1

以下は、Reed に触発された実用的なコードです。

これを LINQPad にポップして、実行を確認できます。http://linqpad.comでLINQPad を入手してください。

    static bool CheckIT(Dictionary<int, List<TypeA>> theList, TypeA what)
    {
        return theList.Any(dctnry => dctnry.Value.Any(lst => lst == what));
    }

    public static void Main()
    {
        Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();

        dict.Add(1, new List<TypeA>{TypeA.1, TypeA.2, TypeA.3};
        dict.Add(11, new List<TypeA>{TypeA.2, TypeA.6, TypeA.7};
        dict.Add(23, new List<TypeA>{TypeA.3, TypeA.4, TypeA.9};

        if (CheckIT(dict,TypeA.3 ))
         Console.WriteLine("Found");
        else
          Console.WriteLine("Lost");
    }

これをさらに一歩進めて、次のような一般的なバージョンを作成することもできます

    static bool CheckIT<T>(Dictionary<int, List<T>> theList, T what) where T : IEquatable<T>
    {
        return theList.Any(dict => dict.Value.Any(l => l.Equals(what)));
    }

それからあなたは言うでしょう

   if (CheckIT<TypeA>(dict,TypeA.3 ))

しかし、あなたは言うこともできます

   if (CheckIT<int>(dict,13 ))

TypeA を定義していなかったので、私が行ったように。

于 2013-06-12T23:29:55.440 に答える