如何使用LINQ重命名列表中的重复项

Roc*_*ark 4 c# linq

我需要一个唯一值列表.但可能是,列表中的值存在两次或更多次.如果发生这种情况,我必须重命名该值,但重命名的值也可以在列表中.

可以使用LINQ查询重命名值,这样我就不需要子查询了吗?

例1: 之前:"one","one","two","two","three" 之后:"one","one_","two","two_","three"

例2: 之前:"one","one","one_" 之后:"one","one_","one__"

第3个"one"有2个下划线,因为第2个"one"被重命名为"one_".

非常感谢你的想法......

Alx*_*ndr 12

我不认为这应该只用简单的linq查询来完成.如果我是你,我会使用HashSet并创建一个函数.像这样的东西:

IEnumerable<String> GetUnique(IEnumerable<String> list) {
    HashSet<String> itms = new HashSet<String>();
    foreach(string itm in list) {
         string itr = itm;
         while(itms.Contains(itr)) {
             itr = itr + "_";
         }
         itms.Add(itr);
         yield return itr;
    }
}
Run Code Online (Sandbox Code Playgroud)

[编辑]

这可以做成扩展方法,所以你可以像这样调用它:( myList.GetUnique();或类似的东西)

[编辑2]

修复了更改迭代器变量的错误.