【问题标题】:How to Join two list in C#?如何在 C# 中加入两个列表?
【发布时间】:2016-12-26 09:56:09
【问题描述】:

I want this output in list3我有两个具有自定义数据类型的list

list1 = {A, B, C, D} 
 [enter image description here][1]
list2 ={ X, A, B, Y} 

然后我需要从list1 中删除A、B,并使用list1 从list2 添加A 和B。

list3 = { A(list2), B(list2), C(list1), D(list1)}



See Above Image, I want those items whose ts_key = 0 and if those records are already in list then get ts_key <> 0 for repeated record

【问题讨论】:

  • 您的元素 A、B、C、D 的数据类型是什么?
  • 你尝试了什么?
  • 用英文解释条件,然后用代码写就很简单了。 为什么 A 和 B 应该取自 list2 而不是 list1?您是否还需要从 list1 和 list2 中删除项目,或者您只是想要一个新集合? list1 的 A 和 list2 的 A 有什么区别?为什么要选后者?
  • @Sefe 我尝试相交,但它不起作用

标签: c# list join


【解决方案1】:

您可以先加入您的两个列表。这为您提供了两个集合的交集:

var lst = list1.Join(list2, tr => tr.tr_key, tr => tr.tr_key, (x,y)=>y).ToList();

之后,您可以将第一个列表中不在第二个列表中的所有值添加到此列表中。为此,您实际上需要一个 EqualiyComparer(我假设您的班级名称为 tr):

public class tr_comparer: IEqualityComparer<tr>
{
    public bool Equals(tr x, tr y)
    {
        return x.tr_key == y.tr_key;
    }

    public int GetHashCode(tr obj)
    {
        return obj.tr_key.GetHashCode();
    }
}

定义比较器后,您可以执行Except:

lst.AddRange(list1.Except(list2, new tr_comparer()));

【讨论】:

  • 谢谢你兄弟...它的作品...!
【解决方案2】:
list1.Union(list2).ToList();

这可能会有所帮助..试试看

【讨论】:

  • 不是联合操作,是相交操作,而是list2中的公共元素与list1合并,并从list1中移除公共元素
  • 这很接近,除了它还会在list2 中添加不在list1 中的元素,其中OP 只想用它们的list2 对应物替换list1 中的对象实例。
【解决方案3】:

试试这个:

List<T> list3=new List<T>
foreach(var item in list1)
{
   if(list2.Contains(item))
   {
      list3.Add(list2.First(x=>x.id==item.id)) //considering id is key
   }
   else
   {
      list3.Add(item);
   }
}

【讨论】:

    【解决方案4】:

    所以你想从list2 中选择公共元素,从list1 中选择其他所有元素。如果您同时执行差异一个交集

    ,听起来您可能能够完成此任务
    var list3 = new List<CustomType>();
    list3.AddRange(list1.Except(list2));
    list3.AddRange(list2.Intersect(list1));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2020-03-05
      • 2016-02-25
      • 1970-01-01
      • 2014-11-22
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多