这是一个想法:我有两个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));
我实际上被困了......我认为我需要迭代每个列表,如果项目相同,只需将它们添加到新列表中......但我似乎无法如果列表不同,请弄清楚如何做到这一点。 有什么想法吗?
答案 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();