-1

元の質問:

私は辞書を持っています。値のサブセットコレクションのみを取得するにはどうすればよいですか?

例:object.Age == 30またはobject.gender == "male"など

質問は、より一般的で他のユーザーに役立つように言い換えられました。

キーが string や int などの単純な型であるが、値がオブジェクトである辞書で、プロパティで値を検索し、値のサブセットを返すにはどうすればよいですか?

つまり、一般的に私が持っているとしましょう

Dictionary<string, myObject> dict = new Dictionary<string, myObject>();

そして、myObject.someInt == X と myObject.someString = 'XYZ' を検索したいのですが、どうすればよいでしょうか?

4

4 に答える 4

3

あなたは使用することができDictionary.ValuesますEnumerable.Where

var age30OrMale = dict.Values.Where(o => Age == 30 || o.gender == "male");
foreach(var o in age30OrMale)
{
    // ...
}

新しいコレクションが必要な場合は、ToListまたは使用できますToArray

var list = age30OrMale.ToList();

これは辞書自体のサブセットではないことに注意してくださいIEnumerable<KeyValuePair<TKey,TValue>>。しかし、それはあなたが求めたものです。

于 2013-01-26T15:41:23.077 に答える
3

最も簡単な方法は、ラムダを使用することです。

var newDictionary = myDictionary.Values.Where(d => d.Age == 30);

編集:

修正された質問に基づいて:

var newDictionary = myDictionary.Values.Where(d => d.Age == 30 || d.Gender == "male");

「など」が何を意味するのかわかりませんが、||and / orを使用してそれを構築し続けることができます&&

編集:

@Guffa が正しく指摘したように、結果の値は辞書ではありません。

var newSubset = myDictionary.Values.Where(d => d.Age == 30 || d.Gender == "male");
于 2013-01-26T15:41:47.327 に答える
2
var newDictionary = myDictionary.Values.Where(d => d.Age == 30 || d.gender == "male").ToDictionary();
于 2013-01-26T15:43:53.847 に答える
1

値をループして、それらのアイテムを取得するだけです。

List<MyObject> result = myDictionary.Values.Where(o => Age == 30).ToList();
于 2013-01-26T15:40:36.177 に答える