【问题标题】:C#: Combine two elements of the SAME list (no duplicates)C#:组合相同列表的两个元素(不重复)
【发布时间】:2021-12-10 17:13:34
【问题描述】:

我有一个对象列表。

这些对象在其他元素中包含一个称为“reference”的字符串。该列表可能如下所示:

|reference| description |
|123      | this should |
|124      | sth         |
|125      | sth         |
|123      | be one      |

我想在此列表中合并具有相同引用的所有元素。 结果应该是:

|reference| description       |
|123      | this should be one|
|124      | sth               |
|125      | sth               |

进入一个新列表。到目前为止,我只能找到有关如何分组或如何组合两个列表的解决方案。 有什么想法吗?

【问题讨论】:

  • 您的设置代码在哪里,以便他人轻松创建解决方案并测试结果并向您展示一个最小的工作示例?
  • 使用.GroupBy将匹配的元素归为一组,然后聚合成一个新项目,可以这样做:items.GroupBy(kvp => kvp.reference).Select(g => new Item(g.Key, string.Join(" ", g.Select(e => e.description))))
  • 我确实尝试了几天但没有运气。在这个问题中,我没有发布代码,因为它要复杂得多,我想专注于这个问题。我认为这样其他人可能会获利更多。

标签: c# list linq


【解决方案1】:

您应该根据参考字段对它们进行分组并连接描述。

这样的东西应该可以工作

var results = list
              .GroupBy(i => i.Reference)
              .Select(g => 
                  (Reference: g.Key, 
                   Description: string.Join(" ", g
                       .Select(i => i.Description)));

【讨论】:

  • 这已经很接近了!有时我有重复的描述。在这种情况下,我希望描述只显示一次。我可以修改您的答案以仅在描述不同的情况下进行连接吗?
  • 来吧,Join() 中应该有一个不同的地方来解决这个问题。
【解决方案2】:

根据您的需要,您可以使用匿名对象或生成您的类类型的新列表...

void Main()
{
    var list = new List<YourClass>()
    {
        new YourClass{Reference = 123, Description = "this should"},
        new YourClass{Reference = 124, Description = "sth"},
        new YourClass{Reference = 125, Description = "sth"},
        new YourClass{Reference = 123, Description = "be one"},
    };
    
    var combined = list
        .GroupBy(item => item.Reference)
        .Select(group => new YourClass
        {
            Reference = group.Key, 
            Description = string.Join(" ", group.Select(element => element.Description).Distinct())
        });
        
    Console.WriteLine(combined);
}

class YourClass
{
    public int Reference {get;set;}
    public string Description {get;set;}
}

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多