替换字符串数组中的重复项

Jen*_*oin 2 c# linq

鉴于以下内容 strings = new string[] { "a", "a", "a", "b", "b", "c", "c", "c", "c", "d" };

如何替换重复的项目以产生以下输出: { "a", "Duplicate", "Duplicate", "b", "Duplicate", "c", "Duplicate", "Duplicate", "Duplicate", "d" }

Ant*_*ram 7

对于这样的事情,特别是如果你打算修改数组而不是产生一个新的序列,我宁愿一个老式的循环.在我看来,它更明显,更"聪明",更容易理解.如果你有类似的看法,循环很容易写.创建一个包含不同项目的集合,并替换已添加到集合中的项目.

var set = new HashSet<string>();
for (int i = 0; i < strings.Length; i++)
{
    if (set.Contains(strings[i]))
    {
        strings[i] = "Duplicate";
    }
    else
    {
        set.Add(strings[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

根据您的输入,您的输出将是:

a
Duplicate
Duplicate
b
Duplicate
c
Duplicate
Duplicate
Duplicate
d
Run Code Online (Sandbox Code Playgroud)

  • 好的反LINQ过度使用答案!但是为了使它在另一个答案中更好地与"优雅"LINQ方式相比,循环体可以简化为`if(!set.Add(strings [i]))strings [i] ="Duplicate";` (4认同)