Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中连接两个列表?_C#_List_Join - Fatal编程技术网

如何在C#中连接两个列表?

如何在C#中连接两个列表?,c#,list,join,C#,List,Join,我有两个带有自定义数据类型的列表 list1 = {A, B, C, D} [enter image description here][1] list2 ={ X, A, B, Y} 然后我需要从list1中删除A和B,并将list2中的A和B添加到list1中 list3 = { A(list2), B(list2), C(list1), D(list1)} See Above Image, I want those items whose ts_key = 0 and if

我有两个带有自定义数据类型的
列表

list1 = {A, B, C, D} 
 [enter image description here][1]
list2 ={ X, A, B, Y} 
然后我需要从
list1
中删除A和B,并将
list2
中的A和B添加到list1中

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
list3={A(list2)、B(list2)、C(list1)、D(list1)}
如上图所示,我想要那个些其ts_键为0的项目,若那个些记录已经在列表中,那个么获取ts_键0以重复记录
这可能会有帮助。试试它。

试试这个:

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);
   }
}
List list3=新列表
foreach(列表1中的变量项)
{
如果(列表2.包含(项目))
{
添加(list2.First(x=>x.id==item.id))//考虑id是键
}
其他的
{
清单3.添加(项目);
}
}

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

var lst = list1.Join(list2, tr => tr.tr_key, tr => tr.tr_key, (x,y)=>y).ToList();
之后,您可以将第一个列表中不在第二个列表中的所有值添加到此列表中。为此,您实际上需要一个EqualyComparer(我假定您的类的名称为
tr
):


因此,您希望从
list2
中选择公共元素,并从
list1
中选择其他所有元素。听起来,如果您同时执行差分和交叉,您可能能够实现这一点

var list3 = new List<CustomType>();
list3.AddRange(list1.Except(list2));
list3.AddRange(list2.Intersect(list1));
var list3=新列表();
列表3.AddRange(列表1.Except(列表2));
list3.AddRange(list2.Intersect(list1));

请参考此文档,元素A、B、C、D的数据类型是什么?您尝试了什么?用英语解释条件,然后用代码编写就很简单了。为什么A和B应该取自列表2而不是列表1?您是否还需要从列表1和列表2中删除项目,还是只需要一个新集合?列表1的A和列表2的A之间有什么区别?为什么要使用后者?@Sefe我尝试了intersect,但它不起作用它不是并集操作,它是intersect操作,但列表2中的公共元素与列表1合并并从列表1中删除公共元素这很接近,除了它还会在
list2
中添加不在
list1
中的元素之外,其中OP只想将
list1
中的对象实例替换为它们的
list2
对应对象。谢谢兄弟。。。它有效。。。!
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();
    }
}
lst.AddRange(list1.Except(list2, new tr_comparer()));
var list3 = new List<CustomType>();
list3.AddRange(list1.Except(list2));
list3.AddRange(list2.Intersect(list1));