按值属性获取字典中值的子集



原始问题:

我有一本字典。如何仅获取值的子集集合,其中

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

问题改写为更通用,对其他用户有帮助:

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

即一般来说,让我们说我有

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

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

您可以使用

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>>。但这是你所要求的。

最简单的方法是使用 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();

相关内容

  • 没有找到相关文章

最新更新