C#Join两个List <int>,删除重复项,NO LINQ

时间:2016-02-04 22:06:04

标签: c# list join int

这是一个想法:我有两个List<int>,我想在上面提到的列表中加入第三个List<int>,没有重复。我知道如何使用.Union但我想在不使用LINQ的情况下完成此操作。到目前为止,我有这个:

Console.WriteLine("Enter numbers for first list: ");
List<int> firstList = new List<int>{20, 40, 10, 10, 30, 80};
//Console.ReadLine().Split(' ').Select(int.Parse).ToList();
Console.WriteLine("Enter numbers for second list: ");
List<int> secondList = new List<int> {25, 20, 40, 30, 10 };
//Console.ReadLine().Split(' ').Select(int.Parse).ToList();
List<int> newList = new List<int>();
foreach (var item in firstList)
{
    if (secondList.Contains(item))
    {
        continue;
    }
}
newList.Sort();
newList.ForEach(p => Console.WriteLine(p));

我实际上被困了......我认为我需要迭代每个列表,如果项目相同,只需将它们添加到新列表中......但我似乎无法如果列表不同,请弄清楚如何做到这一点。 有什么想法吗?

3 个答案:

答案 0 :(得分:5)

这是一个很大的(我的意思是)警告 - 它会变慢。使用LINQ或其他集合(例如HashSet),获得更好的性能。这种方法是O(n ^ 2),而LINQ等是O(n)。

如果它不在列表中,只需循环遍历第二个列表,将值添加到第一个列表。

foreach (var item in secondList)
{
    if (!firstList.Contains(item))
    {
        firstList.Add(item);
    }
}

鉴于您希望在流程结束时有新列表,您只需将第一个列表中的所有项目添加到上述代码之前的结果中:

foreach (var item in firstList)
{
    newList.Add(item);
}

并在添加时将firstList替换为newList

答案 1 :(得分:-1)

您可以利用不同类型的集合来执行以下操作:

var set = new HashSet<int>(firstList);
set.UnionWith(secondList);

var newList = new List<int>(set);

答案 2 :(得分:-1)

这样的东西?

newList.AddRange(firstList);
newList.AddRange(secondList);
newList = newList.Distinct().ToList();
newList.Sort();