将索引添加到根据Id组重置的列表中
本文关键字:列表 Id 添加 索引 | 更新日期: 2023-09-27 18:17:08
给定一个对象,如:
public class Test
{
public int Id { get; set;}
public int Field1 { get; set; }
public int Field2 { get; set; }
}
是这样填充的:
List<Test> list = new List<Test>();
list.Add( new Test { Id = 1, field1 = 1});
list.Add( new Test { Id = 1, field1 = 2});
list.Add( new Test { Id = 2, field1 = 3});
list.Add( new Test { Id = 2, field1 = 4});
我可以创建一个索引列并遍历列表:
var indexList = list.Select((t, i) => new {t, index = i}).ToList();
foreach (var t in indexList)
{
Console.WriteLine("ID: " + t.t.Id + " ---- Index:" + t.index);
}
我得到这样的结果:
ID: 1 ---- Index:0
ID: 1 ---- Index:1
ID: 2 ---- Index:2
ID: 2 ---- Index:3
我真正想做的是重置每个Id组的索引,这样我就能得到这样的输出:
ID: 1 ---- Index:0
ID: 1 ---- Index:1
ID: 2 ---- Index:0
ID: 2 ---- Index:1
我试过玩GroupBy,但运气不好。
谁能给我指个正确的方向?谢谢
如何:
var indexList = list
.GroupBy(item => item.Id)
.SelectMany(grp => grp
.Select((item, index) => new { index = index, t = item }))
.ToList();
例子: http://ideone.com/nSTa8A
var indexList = list.GroupBy(x=>x.Id)
.SelectMany(g => g.Select((t, i) => new {t, index = i})
.ToList();