如何组合两个列表的内容
本文关键字:列表 两个 何组合 组合 | 更新日期: 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"]);
}
}
如果您需要在某个时间点将两个列表组合成第三个列表,则Union
和Concat
是合适的,正如其他人所提到的。
如果你想要两个列表的"实时"组合(这样对第一个和第二个列表的更改会自动反映在"组合"列表中),那么你可能需要查看Bindable LINQ或Obtics。