【问题标题】:C#: Rename/replace duplicates in list with an added numberC#:用添加的数字重命名/替换列表中的重复项
【发布时间】:2018-12-02 21:41:29
【问题描述】:

我有一个List<string>,我想用添加的数字替换所有重复项。一个例子是:

{"Ply0", "Ply+45", "Ply-45", "Ply0"}

我希望每个"Ply0" 都有一个唯一的名称,因此请将它们替换为"Ply0_1""Ply0_2"。列表的顺序保持不变是很重要的。之后列表应如下所示:

{"Ply0_1", "Ply+45", "Ply-45", "Ply0_2"}

我曾尝试首先使用 LINQ 查找重复项,但我是新手,并且在保持原始列表顺序的同时也无法用添加的数字替换它们。

任何帮助将不胜感激!

【问题讨论】:

  • 到目前为止你尝试过什么?你能分享你的代码吗?一个好的练习是先在没有 Linq 的情况下编写它。

标签: c# linq replace duplicates rename


【解决方案1】:

使用linq,可以这样做,但我觉得可读性不高

var listx = new List<string>() { "Ply0", "Ply+45", "Ply-45", "Ply0" };

var res = listx.Select((s, i) => new { orgstr=s, index = i })
          .GroupBy(x => x.orgstr)
          .SelectMany(g => g.Select((x, j) => new { item = x, suffix = j + 1, count = g.Count() }))
          .OrderBy(x => x.item.index)
          .Select(x => x.count == 1 ? x.item.orgstr : x.item.orgstr + "_" + x.suffix)
          .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2019-06-06
    • 2017-11-11
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2019-05-20
    • 2021-05-23
    相关资源
    最近更新 更多