有没有办法在不知道该值的情况下按公共 属性 值对所有对象进行分组?
Is there a way to group all object by a common property value, without knowing that value?
如果我有一个 House 对象,我想将所有颜色相同的对象分组,有没有办法在不知道实际颜色的情况下做到这一点?
例如
房子
颜色
房子A
黄色
房子B
绿色
房子C
黄色
房子D
绿色
在这种情况下,HouseA 和 HouseC 将被分组到 1 个列表中,而 HouseB 和 HouseD 将被分组到另一个列表中。
如何在不知道颜色的情况下对这些房子进行分组?
简单,使用 GroupBy
LINQ 方法,如下所示:
List<House> houses = ... // Your houses here
var grouped = houses.GroupBy(x => x.Color);
// grouped is an'IEnumerable<IGrouping<string, House>>' and you can access the properties like so:
foreach (var grouping in grouped)
{
Console.WriteLine(grouping.Key);
foreach (var house in grouping)
Console.WriteLine(house.Name);
}
相反,如果您想将其转换为字典以便快速轻松地查找,您也可以像这样轻松地执行此操作:
Dictionary<string, List<House>> housesByColor = grouped.ToDictionary(k => k.Key, v => v.ToList());
看看我的demo
如果我有一个 House 对象,我想将所有颜色相同的对象分组,有没有办法在不知道实际颜色的情况下做到这一点?
例如
房子 | 颜色 |
---|---|
房子A | 黄色 |
房子B | 绿色 |
房子C | 黄色 |
房子D | 绿色 |
在这种情况下,HouseA 和 HouseC 将被分组到 1 个列表中,而 HouseB 和 HouseD 将被分组到另一个列表中。
如何在不知道颜色的情况下对这些房子进行分组?
简单,使用 GroupBy
LINQ 方法,如下所示:
List<House> houses = ... // Your houses here
var grouped = houses.GroupBy(x => x.Color);
// grouped is an'IEnumerable<IGrouping<string, House>>' and you can access the properties like so:
foreach (var grouping in grouped)
{
Console.WriteLine(grouping.Key);
foreach (var house in grouping)
Console.WriteLine(house.Name);
}
相反,如果您想将其转换为字典以便快速轻松地查找,您也可以像这样轻松地执行此操作:
Dictionary<string, List<House>> housesByColor = grouped.ToDictionary(k => k.Key, v => v.ToList());
看看我的demo