0

我有一个类似这样的数据集:

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,但无法获得所需的结果 - 谁能帮忙?

4

2 回答 2

3
IEnumerable<string> output = input
    .GroupBy(i => i.Num)
    .SelectMany(grp => grp.Select((item, idx) => string.Format("{0}_{1}", grp.Key, idx)));
于 2012-11-15T19:58:31.763 回答
1

您可以按数字分组并使用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.

于 2012-11-15T19:54:49.767 回答