如何组合两个列表的内容?

时间:2011-11-29 04:06:48

标签: c# asp.net

我有两个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; 
    }
}

请有人告诉我该怎么做?

6 个答案:

答案 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)

如果您需要将两个列表的时间点组合到第三个列表中,UnionConcat是合适的,如其他人所述。

如果你想要一个&#39; live&#39;两个列表的组合(以便对第一个和第二个列表的更改会自动反映在&#39;组合列表中),然后您可能需要查看Bindable LINQObtics。< / p>