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

C# 通过附加计数器使每个字符串唯一,c#,.net,C#,.net,我有一个字符串列表,我想通过在列表末尾添加一个数字来使列表中的每个字符串都是唯一的。此外,它不区分大小写,因此“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("b

我有一个字符串列表,我想通过在列表末尾添加一个数字来使列表中的每个字符串都是唯一的。此外,它不区分大小写,因此“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");
列表输入=新列表();
输入。添加(“苹果”);
输入。添加(“球”);
输入。添加(“苹果”);
输入。添加(“苹果”);
输入。添加(“car”);
输入。添加(“球”);
输入。添加(“球”);
预期产出:

“苹果”、“球”、“苹果2”、“苹果3”、“汽车”、“球2”、“球3”

我需要帮助开发产生输出的逻辑。多谢各位

已编辑:我不能有0和1,重复的字符串必须以2、3、4开头

编辑

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();

如果你有
apple0,ball1,apple2,Apple3,car4,
,它还能工作吗?不,我不能有0和1,一切都要从重复开始2@C.J.我只是说,如果你所需要做的就是让字符串独一无二,这样,您就可以在每个字符串的末尾继续应用递增的数字。@N4TKD我使用了.contain函数,但首先,它不区分大小写,其次,我不知道如何使循环在重复超过两次时进行检查]这是一个奇怪的要求!但我认为@L.B已经回答了你的问题。教授不可能接受这些疯狂的林克技能作为答案。不管怎样,我都会感谢你的smartz@L.B感谢您的解决方案,但有一个缺点,您的代码无意中按字母顺序排序,我必须保留原始排序顺序。如果
列表原始
是一个
列表
成员,您可以将其简化。看见
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();