C#:组合相同列表的两个元素(不重复)
Posted
技术标签:
【中文标题】C#:组合相同列表的两个元素(不重复)【英文标题】:C#: Combine two elements of the SAME list (no duplicates) 【发布时间】: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))))
idownvotedbecau.se/noattempt
我确实尝试了几天但没有运气。在这个问题中,我没有发布代码,因为它要复杂得多,我想专注于这个问题。我认为这样其他人可能会获利更多。
【参考方案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 YourClassReference = 123, Description = "this should",
new YourClassReference = 124, Description = "sth",
new YourClassReference = 125, Description = "sth",
new YourClassReference = 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;
【讨论】:
以上是关于C#:组合相同列表的两个元素(不重复)的主要内容,如果未能解决你的问题,请参考以下文章
组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为啥[重复]