原始问题:
我有一本字典。如何仅获取值的子集集合,其中
例如:object.Age == 30
或object.gender == "male"
等。
问题改写为更通用,对其他用户有帮助:
在字典中,键是简单类型(如字符串或 int),但我的值是对象,如何按其属性搜索值并返回值的子集?
即一般来说,让我们说我有
Dictionary<string, myObject> dict = new Dictionary<string, myObject>();
我想在myObject.someInt == X和myObject.someString = 'XYZ'上搜索,我该怎么做?
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>>
。但这是你所要求的。
最简单的方法是使用 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");
var newDictionary = myDictionary.Values.Where(d => d.Age == 30 || d.gender == "male").ToDictionary();
您只需遍历值并获取这些项:
List<MyObject> result = myDictionary.Values.Where(o => Age == 30).ToList();