我有两个列表需要组成联合,但是我在.NET 2.0中,所以Union()方法似乎已经出来了。这些是整数列表,因此平等比较没有问题。有什么好办法可以解决这个问题?
答案 0 :(得分:3)
您可以将它们添加到一起并删除重复项:
public List<T> Union<T>(List<T> firstList, List<T> secondList)
{
Dictionary<T, int> tmp = new Dictionary<T, int>();
foreach (T val in firstList)
{
tmp[val] = 1;
}
foreach (T val in secondList)
{
tmp[val] = 1;
}
return new List<T>(tmp.Keys);
}
答案 1 :(得分:3)
如何(使用字典键作为哈希表):
public static List<T> Union<T>(List<T> first, List<T> second) {
List<T> newList = new List<T>(first.Count + second.Count);
Dictionary<T, object> firstItems = new Dictionary<T, object>(first.Count);
foreach (T item in first) {
newList.Add(item);
firstItems.Add(item, null);
}
foreach (T item in second) {
if (!firstItems.ContainsKey(item)) {
newList.Add(item);
}
}
return newList;
}
这将维护first
和second
中的项目顺序,同时仍然使用O(1)检查列表之间的重复项目
答案 2 :(得分:1)
如何使用简单的foreach,只添加列表中尚未包含的元素:
foreach (int item in list2)
{
if (!list1.Contains(item))
{
list1.Add(item);
}
}
这将保留列表的顺序。
答案 3 :(得分:1)
如果您使用Visual Studio 2008,则可以使用linqbridge让您在仍然以Framework 2.0为目标时使用LINQ to Objects。
推送,推送,推送到.NET 3.5。 LINQ和lambdas改变了你对代码的思考方式(为了更好,恕我直言)。