这是与This previus question类似的问题,但在我的情况下,我不知道我必须在每个列表中添加多少项目。
我有一个"项目"具有此属性
.gitignore
此列表包含以下值:
如何将此列表拆分为ItemA和ItemB的新public class Items{
public Id { get; set;}
public String ItemA { get; set;}
public String ItemB { get; set;}
public String ItemC { get; set;}
public String ItemD { get; set;}
public String ItemE { get; set;}
}
// And a List of Items
List<Items> ....
分组?
在此示例中,预期结果应为:
List<List<Items>>
答案 0 :(得分:2)
只需使用GroupBy
并创建一个包含您要分组的属性的匿名类。
var result = yourList.GroupBy(x => new { x.ItemA, x.ItemB })
.Select(grp => grp.ToList())
.ToList();
答案 1 :(得分:1)
使用LINQ轻松分组
您可以通过提供匿名对象来分组LINQ的内置Enumerable.GroupBy()
方法:
// This will group your rows using the values in ItemA and ItemB
var grouped = input.GroupBy(i => new { i.ItemA, i.ItemB })
.ToList();
这会将您现有的集合分解为您要查找的三个不同的分组,每个分组都包含一个IEnumerable<Items>
,其中包含该组中的每个分组。
如果你需要整数......
如果您想要实际检索字符串的整数值(因为所有属性当前都是字符串),您可以考虑显式解析它们,或者编写一个方法,将整数数组返回预期值: / p>
public class Items
{
// Omitted for brevity
public int[] ToIntegerArray()
{
return new int[]{
Int32.Parse(Id),
Int32.Parse(ItemA),
Int32.Parse(ItemB),
Int32.Parse(ItemC),
Int32.Parse(ItemD),
Int32.Parse(ItemE)
};
}
}
这样您就可以将代码更改为仅输出实际值而不是Items
个对象的集合:
// This will group your rows using the values in ItemA and ItemB and map
// each of the inner groupings to an array of integer values
var groupedItems = items.GroupBy(i => new { i.ItemA, i.ItemB })
.Select(g => g.Select(ig => ig.ToIntegerArray()))
.ToList();
示例强>