我有一个数据结构列表,其中包含一个名为group
的属性。
现在,我想根据group
- 值在多个列表中拆分此列表。
例如,我在原始列表中有5个对象,其中包含以下group
- 值:
0. group: "group1"
1. group: "group1"
2. group: "group2"
3. group: "group2"
4. group: "group3"
记住这个列表我希望每个group
- 值中有3个列表。一个列表只包含具有组“group1”的对象,下一个具有“group2”等等...
我想我可以用Linq做到这一点(我可以这样做以从具有给定值的组中获取单个列表)但我无法弄清楚如何使用所有可能的组自动执行此操作。
答案 0 :(得分:3)
假设您在同一个集合中有多个类型,我认为您应该引入一个接口(名称可以讨论;)
public interface IHaveGroup
{
string Group { get; }
}
然后,你可以使用LINQ。
IEnumerable<IHaveGroup> items = // get all items as a single group
var groups = items.GroupBy(x => x.Group);
答案 1 :(得分:2)
GroupBy
可以满足您的需求。但是如果你想在每个组包含一个列表的列表中得到结果,你应该像这样使用它:
IList<List<Item>> groups = items.GroupBy(x => x.Group).Select(x => x.ToList()).ToList();
答案 2 :(得分:0)
您可以使用Linq的group be功能。我添加一个样本,输出将是。
组group3有1个元素
List<GroupTemp> list = new List<GroupTemp>();
list.Add(new GroupTemp("group1", "1"));
list.Add(new GroupTemp("group1", "2"));
list.Add(new GroupTemp("group2", "3"));
list.Add(new GroupTemp("group2", "4"));
list.Add(new GroupTemp("group3", "5"));
var groupedList = list.GroupBy(t => t.key).ToList();
foreach (var entity in groupedList)
{
Console.WriteLine(String.Format("Group {0} has {1} elements", entity.Key, entity.Count()));
}