C#:使用添加的数字重命名/替换列表中的重复项

时间:2018-06-23 19:27:10

标签: c# linq replace duplicates rename

我有一个List<string>,我想在其中用所有添加的数字替换所有重复项。一个例子是:

{"Ply0", "Ply+45", "Ply-45", "Ply0"}

我希望每个"Ply0"都具有唯一的名称,因此将它们替换为"Ply0_1""Ply0_2"。列表的顺序保持不变很重要。之后,列表应如下所示:

{"Ply0_1", "Ply+45", "Ply-45", "Ply0_2"}

我尝试过首先使用LINQ查找重复项,但是我是新手,在保持原始列表的顺序的同时,也很难用添加的数字替换它们。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

使用linq可以做到这一点,但我认为可读性不强

var listx = new List<string>() { "Ply0", "Ply+45", "Ply-45", "Ply0" };

var res = listx.Select((s, i) => new { orgstr=s, index = i })
          .GroupBy(x => x.orgstr)
          .SelectMany(g => g.Select((x, j) => new { item = x, suffix = j + 1, count = g.Count() }))
          .OrderBy(x => x.item.index)
          .Select(x => x.count == 1 ? x.item.orgstr : x.item.orgstr + "_" + x.suffix)
          .ToList();