-1

原始问题:

我有一本字典。我怎样才能只获得值的子集集合,其中

如:object.Age == 30object.gender == "male"等。

重新措辞的问题更普遍,对其他用户有帮助:

在键是简单类型(例如 string 或 int)但我的值是对象的字典中,如何按属性搜索值并返回值的子集?

即一般来说我有

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

我想搜索 myObject.someInt == X 和 myObject.someString = 'XYZ',我该怎么做?

4

4 回答 4

3

您可以使用Dictionary.ValuesEnumerable.Where

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

如果你想要一个新的集合,你可以使用ToListToArray

var list = age30OrMale.ToList();

请注意,这不是字典本身的子集,因此它不是IEnumerable<KeyValuePair<TKey,TValue>>. 但这是你要求的。

于 2013-01-26T15:41:23.077 回答
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");
于 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 回答