C#: Преименуване/замяна на дубликати в списък с добавен номер

Имам List<string>, където бих искал да заменя всички дубликати с добавен номер към тях. Пример би бил:

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

Бих искал всяко "Ply0" да има уникално име, така че ги заменете с "Ply0_1" и "Ply0_2". Важно е редът на списъка да остане същият. След това списъкът трябва да изглежда така:

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

Първо се опитах да намеря дубликатите с LINQ, но съм нов в него и също имам проблеми да ги заменя с добавения номер, като същевременно запазвам реда на оригиналния списък.

Всяка помощ ще бъде много оценена!


person didyousaydisco    schedule 23.06.2018    source източник
comment
Какво сте опитвали досега? Можете ли да споделите своя код? Добро упражнение е първо да го напишете без Linq.   -  person aloisdg    schedule 23.06.2018


Отговори (1)


Използвайки 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();
person Eser    schedule 23.06.2018