c# - 将两个列表合并为一个并对项目进行排序

标签 c# sorting

有没有一种方法可以将两个给定的列表合并(不合并)到一个列表中,并使用一个 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/

相关文章:

c# - 如何使用延迟加载和单表继承从数据库中获取数据

Java SuperClass 和 SubClass 扩展可比较

c++ - 列表类型的binary_search函数的时间复杂度是多少

c# - C# 中的 float 是否有一个好的基数排序实现

c# - 在 MFC 应用程序中托管 Windows 窗体 (C#) (VC++,VS6.0)

c# - .NET 应用程序突然出现非托管内存的极端增长

c# - P/Invoke 是否执行 DLL 然后将其关闭?

sorting - 使用 frama-c 的递归快速排序的正式证明

java - 从 map 中查找前 100 个元素的最有效方法

c# - 发出连续的蜂鸣声,直到在 c# 中被打断