原始问题:
我有一本词典。我怎样才能获得
所在的子集集合例如:object.Age == 30
或object.gender == "male"
等。
问题改写为更为通用且对其他用户有帮助:
在字典中,键是一个简单类型,如string或int,但我的值是对象,如何按属性搜索值并返回值的子集?
即一般情况下我可以说
Dictionary<string, myObject> dict = new Dictionary<string, myObject>();
我想搜索myObject.someInt == X和myObject.someString ='XYZ',我该怎么做?
答案 0 :(得分: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>>
。但这就是你要求的。
答案 1 :(得分:3)
最简单的方法是使用lambda:
var newDictionary = myDictionary.Values.Where(d => d.Age == 30);
编辑:
根据您修改后的问题:
var newDictionary = myDictionary.Values.Where(d => d.Age == 30 || d.Gender == "male");
我不确定“等”是什么意思,但您可以使用||
和/或&&
编辑:
正如@Guffa正确指出的那样,结果值不是字典:
var newSubset = myDictionary.Values.Where(d => d.Age == 30 || d.Gender == "male");
答案 2 :(得分:2)
var newDictionary = myDictionary.Values.Where(d => d.Age == 30 || d.gender == "male").ToDictionary();
答案 3 :(得分:1)
您只需遍历值并获取这些项目:
List<MyObject> result = myDictionary.Values.Where(o => Age == 30).ToList();