在.NET 2.0中组合两个List <t>的好方法吗?</t>

时间:2009-11-22 00:32:06

标签: .net-2.0 list union

我有两个列表需要组成联合,但是我在.NET 2.0中,所以Union()方法似乎已经出来了。这些是整数列表,因此平等比较没有问题。有什么好办法可以解决这个问题?

4 个答案:

答案 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;
}

这将维护firstsecond中的项目顺序,同时仍然使用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改变了你对代码的思考方式(为了更好,恕我直言)。