C #: переименовать / заменить дубликаты в списке с добавленным номером - PullRequest
0 голосов
/ 23 июня 2018

У меня есть List<string>, где я хотел бы заменить все дубликаты добавленным к ним номером.Примером может быть:

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

Я бы хотел, чтобы у каждого "Ply0" было уникальное имя, поэтому замените их на "Ply0_1" и "Ply0_2".Важно, чтобы порядок в списке не изменился.После этого список должен выглядеть следующим образом:

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

Я сначала попытался найти дубликаты с помощью LINQ, но я новичок в этом, а также не могу заменить их на добавленный номер, сохраняяпорядок оригинального списка.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 23 июня 2018

Используя 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();
...