我正在尝试按名称对对象集合进行分组,但是我还想在每个组中设置一个顺序的InstanceID属性,这样我就可以做到以下几点:
Name="A", InstanceID=0
Name="A", InstanceID=1
Name="A", InstanceID=2
Name="B", InstanceID=0
Name="C", InstanceID=0
Name="C", InstanceID=1
Name="C", InstanceID=2
Name="D", InstanceID=0
Name="D", InstanceID=1
Name="D", InstanceID=2
Name="D", InstanceID=3
等等。
我假设有后通过LINQ应用于一些投影GroupBy
,但我不知道如何内用蓄电池或索引Select
或SelectMany
。
我不想创建一个新的集合,而只修改InstanceID
每个元素上设置的现有集合。
您可以GroupBy
按Name
,然后为每个组设置InstanceID
属性:
var groups = objects.GroupBy(m => m.Name);
foreach (var group in groups)
{
int index = 0;
foreach (var item in group)
item.InstanceID = index++;
}
编辑:
您可以创建扩展方法来ForEach
接收项目和索引:
static class Extensions
{
public static void ForEach<T>(this IEnumerable<T> collection, Action<T> action)
{
foreach (var item in collection)
action(item);
}
public static void ForEach<T>(this IEnumerable<T> collection, Action<T, int> action)
{
int index = 0;
foreach (var item in collection)
action(item, index++);
}
}
并像这样使用它:
var groups = objects.GroupBy(m => m.Name);
groups.ForEach(g => g.ForEach((o, i) => o.InstanceID = i));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句