有没有一种方法可以将两个给定的列表合并(不合并)到一个列表中,并使用一个 for 循环以排序的方式存储项目?
此外,我正在寻找一种不使用 API 方法(如联合、排序等)的解决方案。
示例代码。
private static void MergeAndOrder()
{
var listOne = new List<int> {3, 4, 1, 2, 7, 6, 9, 11};
var listTwo = new List<int> {1, 7, 8, 3, 5, 10, 15, 12};
//Without Using C# helper methods...
//ToDo.............................
//Using C# APi.
var expectedResult = listOne.Union(listTwo).ToList();
expectedResult.Sort();//Output: 1,2,3,4,5,6,7,8,9,10,11,12,15
//I need the same result without using API methods, and that too by iterating over items only once.
}
PS:我在面试中被问到过这个问题,但目前还没有找到答案。
最佳答案
为什么不能使用 api 方法?重新发明轮子是愚蠢的。此外,正是 .ToList()
调用让您丧命。 永远不要调用 .ToList()
或 .ToArray()
直到你绝对必须这样做,因为它们会破坏你的惰性计算。
这样做,您将用最少的必要数量枚举列表:
var expectedResult = listOne.Union(listTwo).OrderBy(i => i);
这将使用哈希集在一个循环中执行并集,延迟执行意味着排序的基础传递将搭载在并集上。但我认为不可能在一次迭代中完成排序,因为排序不是 O(n) 操作。
关于c# - 将两个列表合并为一个并对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2280987/