Skip to main content
 首页 » 编程设计

c#之使用 Linq 叠加/连接两个集合

2024年02月24日30leader

我有以下场景:

列表 1 有 20 个 TItem 类型的项目,列表 2 有 5 个相同类型的项目。 list 1 已包含 list 2 中的项目,但处于不同的状态。我想用 list 2 中的项目覆盖 list 1 中的 5 项。

我认为联接可能有效,但我想覆盖列表 1 中的项目,而不是将它们联接在一起并产生重复项。

有一个唯一的key可以用来查找List 1中哪些item要覆盖这个key是int类型

请您参考如下方法:

您可以使用内置的 Linq .Except() 但它需要一个 IEqualityComparer 所以使用 a fluid version .Except() 而不是。

假设一个对象具有您指定的整数键:

public class Item 
{ 
    public int Key { get; set; } 
    public int Value { get; set; } 
    public override string ToString() 
    { 
        return String.Format("{{{0}:{1}}}", Key, Value); 
    } 
} 

原始对象列表可以与更改后的对象列表合并,如下所示:

IEnumerable<Item> original = new[] { 1, 2, 3, 4, 5 }.Select(x => new Item 
    { 
        Key = x, 
        Value = x 
    }); 
IEnumerable<Item> changed = new[] { 2, 3, 5 }.Select(x => new Item 
    { 
        Key = x, 
        Value = x * x 
    }); 
 
IEnumerable<Item> result = original.Except(changed, x => x.Key).Concat(changed); 
result.ForEach(Console.WriteLine); 

输出:

{1:1} 
{4:4} 
{2:4} 
{3:9} 
{5:25}