我有两个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;
}
}
请有人告诉我该怎么做?
答案 0 :(得分:5)
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,它真的很擅长这样的事情。
答案 1 :(得分:3)
使用Union方法;它将排除重复。
int[] combinedWithoutDups = oldItemarry1.Union(newItemarry1).ToArray();
答案 2 :(得分:2)
您可以合并两个列表:
List<int> result = new List<int>();
result.AddRange(oldList1);
result.AddRange(oldList2);
列表result
现在包含两个列表的所有元素。
答案 3 :(得分:2)
这是接近它的一种方法:
public List<int> Itemarry1()
{
List<int> combinedItems = new List<int>();
combinedItems.AddRange(oldItemarray1);
combinedItems.AddRange(newItemarray1);
return combinedItems;
}
答案 4 :(得分:0)
作为最佳做法,尽可能使用IEnumerable而不是List。然后,为了使这项工作最佳,您需要一个只读属性:
public IEnumerable<int> Itemarry1 // want to combine both the item
{
get
{
return ((List<int>)ViewState["oldItemarry1 "]).Concat((List<int>)ViewState["Itemarry1"]);
}
}
答案 5 :(得分:0)
如果您需要将两个列表的时间点组合到第三个列表中,Union
和Concat
是合适的,如其他人所述。
如果你想要一个&#39; live&#39;两个列表的组合(以便对第一个和第二个列表的更改会自动反映在&#39;组合列表中),然后您可能需要查看Bindable LINQ或Obtics。< / p>