我需要一个唯一值列表。但它可能是,值在列表中存在两次或更多次。 如果发生这种情况,我必须重命名该值,但重命名的值也可能在列表中。
可以使用 LINQ 查询重命名值,这样我就不需要子查询了吗?
示例 1: 之前: “一”、“一”、“二”、“二”、“三” 之后: “一”、“一_”、“二”、“二_”、“三”
示例 2: 之前: “一一一_” 之后: “一个”,“一个_”,“一个__”
第三个“one”有2个下划线,因为第二个“one”被重命名为“one_”。
非常感谢你的想法...
最佳答案
我不认为这应该通过简单的 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;
}
}
[编辑]
虽然这可以做成一个扩展方法,所以你可以这样调用它:myList.GetUnique();
(或类似的东西)
[编辑2]
修复了迭代器变量被更改的错误。
关于c# - 如何使用 LINQ 重命名列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163467/