我有一个类似这样的数据集:
2,Black
2,Blue
2,Red
1,Small
1,Medium
我需要将其转换为以下内容:
2_0
2_1
2_2
1_0
1_1
我目前拥有的 LINQ 查询使用第二个数字的索引,但是从 2_ 更改为 1_ 时它不会重置为 0。我尝试使用 GroupBy,但无法获得所需的结果 - 谁能帮忙?
IEnumerable<string> output = input
.GroupBy(i => i.Num)
.SelectMany(grp => grp.Select((item, idx) => string.Format("{0}_{1}", grp.Key, idx)));
您可以按数字分组并使用Select()
提供索引的版本:
var result = data.GroupBy(x => x.Number,
(key, g) => g.Select((_, i) => string.Format("{0}_{1}", key, i)))
.SelectMany(x => x);
请注意,如果相同的数字不连续,这可能与您预期的不同:例如,2, 2, 2, 1, 1, 2, 2
.