通过附加计数器使每个字符串唯一

本文关键字:字符串 唯一 计数器 | 更新日期: 2023-09-27 17:49:27

我有一个字符串列表,我想通过在列表末尾添加一个数字来使列表中的每个字符串唯一。此外,它不区分大小写,因此"apple"应假定为与"apple"或"apple"相同

例如:

List<string> input = new List<string>();
input.Add("apple");
input.Add("ball");
input.Add("apple");
input.Add("Apple");
input.Add("car");
input.Add("ball");
input.Add("BALL");
预期输出:

"苹果"、"球","2代"、"都"台苹果3代,"车"、"ball2"、"BALL3"

我需要帮助来开发产生输出的逻辑。谢谢你。

编辑:我不能有0和1,重复字符串必须以2,3,4…

通过附加计数器使每个字符串唯一

var newList = input.GroupBy(x => x.ToUpper())
              .SelectMany(g => g.Select((s, i) => i == 0 ? s : s + (i+1)))
              .ToList(); 
var str = String.Join(", ", newList);

编辑

var newList = input.Select((s, i) => new { str = s, orginx = i })
                .GroupBy(x => x.str.ToUpper())
                .Select(g => g.Select((s, j) => new { s = j == 0 ? s.str : s.str + (j + 1), s.orginx }))
                .SelectMany(x => x)
                .OrderBy(x => x.orginx)
                .Select(x => x.s)
                .ToList();