如何组合两个列表的内容

本文关键字:列表 两个 何组合 组合 | 更新日期: 2023-09-27 18:16:16

我有两个List<int>实例。现在我想把它们组合成第三个列表。

public List<int> oldItemarry1 // storing old item
{
    get 
    { 
        return (List<int>)ViewState["oldItemarry1 "]; 
    }
    set 
    { 
        ViewState["oldItemarry1 "] = value; 
    }
}
public List<int> newItemarry1 // storing new item
{
    get
    { 
        return (List<int>)ViewState["newItemarry1 "]; 
    }
    set 
    { 
        ViewState["newItemarry1 "] = value; 
    }
}
public List<int> Itemarry1 // want to combine both the item
{
    get
    { 
        return (List<int>)ViewState["Itemarry1 "]; 
    }
    set 
    { 
        ViewState["Itemarry1 "] = value; 
    }
}
谁来告诉我该怎么做?

如何组合两个列表的内容

LINQ有Concat方法:

return oldItemarry1.Concat(newItemarry1).ToList();

这只是把列表放在一起。LINQ也有Intersect方法,它只给你存在于两个列表中的项目,Except方法,它只给你存在于其中一个列表中的项目,而不是两个列表。Union方法给出两个列表之间的所有项目,但不像Concat方法那样重复。

如果LINQ不是一个选项,你可以创建一个新的列表,通过AddRange将每个列表中的项目添加到两个列表中,然后返回。

编辑:

由于LINQ不是一个选项,您可以通过以下几种方式完成:

将列表与所有项合并,包括重复项:

var newList = new List<int>();
newList.AddRange(first);
newList.AddRange(second);
return newList

合并不重复项

var existingItems = new HashSet<int>();
var newList = new List<int>();
existingItems.UnionWith(firstList);
existingItems.UnionWith(secondList);
newList.AddRange(existingItems);
return newList;

这当然假设您使用的是。net 4.0,因为HashSet<T>是在那时引入的。你不用Linq真是太遗憾了,Linq在这方面真的很出色。

使用Union方法;它将排除重复项。

int[] combinedWithoutDups = oldItemarry1.Union(newItemarry1).ToArray();

可以合并两个列表:

List<int> result = new List<int>();
result.AddRange(oldList1);
result.AddRange(oldList2);

列表result现在包含了两个列表的所有元素

有一种方法:

public List<int> Itemarry1()
{
    List<int> combinedItems = new List<int>();
    combinedItems.AddRange(oldItemarray1);
    combinedItems.AddRange(newItemarray1);
    return combinedItems;
}

作为最佳实践,尽可能使用IEnumerable而不是List。然后,为了使其工作得最好,您需要一个只读属性:

public IEnumerable<int> Itemarry1 // want to combine both the item
{
    get
    { 
        return ((List<int>)ViewState["oldItemarry1 "]).Concat((List<int>)ViewState["Itemarry1"]); 
    }
}

如果您需要在某个时间点将两个列表组合成第三个列表,则UnionConcat是合适的,正如其他人所提到的。

如果你想要两个列表的"实时"组合(这样对第一个和第二个列表的更改会自动反映在"组合"列表中),那么你可能需要查看Bindable LINQ或Obtics。