我有一个List<string>
,我想在其中用所有添加的数字替换所有重复项。一个例子是:
{"Ply0", "Ply+45", "Ply-45", "Ply0"}
我希望每个"Ply0"
都具有唯一的名称,因此将它们替换为"Ply0_1"
和"Ply0_2"
。列表的顺序保持不变很重要。之后,列表应如下所示:
{"Ply0_1", "Ply+45", "Ply-45", "Ply0_2"}
我尝试过首先使用LINQ查找重复项,但是我是新手,在保持原始列表的顺序的同时,也很难用添加的数字替换它们。
任何帮助将不胜感激!
答案 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();