Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 高效列表排序_C#_Performance_Linq_List - Fatal编程技术网

C# 高效列表排序

C# 高效列表排序,c#,performance,linq,list,C#,Performance,Linq,List,我目前正在测试按键值排序列表的最佳算法 我有一个非常简单的对象,下面的代码片段来自C class BasicObject { int Key; } 在构造对象时随机设置密钥 因此,我有一个BasicObject对象列表,最后需要按键值排序 List<BasicObject> basicList = new List<BasicObject>(); for (int i = 0; i < someAmount; i++) { basicList.Add(new Ba

我目前正在测试按键值排序列表的最佳算法

我有一个非常简单的对象,下面的代码片段来自C

class BasicObject
{
int Key;
}
在构造对象时随机设置密钥

因此,我有一个BasicObject对象列表,最后需要按键值排序

List<BasicObject> basicList = new List<BasicObject>();
for (int i = 0; i < someAmount; i++)
{
basicList.Add(new BasicObject());
}
即使这样做有效,它也太慢了。 用50000个物体进行测试,已经需要8秒了

LINQ方法OrderBy要快得多

orderedList = basicList.OrderByDescending(x => x.Key).ToList();
50000个对象只需7毫秒

然而,这是一个助手方法,我想避开它,而是使用我自己的算法按键排序对象列表

我还尝试了LinkedList,而不是普通的列表。这稍微快一点,但仍然远离LINQ方法

那么,有没有一种方法可以稍微加快对象的排序呢


提前谢谢你的帮助

如果您不想使用我觉得很奇怪的Linq,您可以使用:


注意:此方法将修改原始列表,而不是创建新列表。

即使您希望使用自己的算法,它也不会像LINQ方法中实现的算法那样高效和快速。我们不知道LINQ中使用的是哪种排序算法,但我们知道它已经过优化,实现起来非常高效,并且利用了框架的强大功能,否则对50000个对象进行排序不会花费7毫秒

看看,考虑不同的排序算法。


如果要更改编程语言,则必须使用该编程语言的功能。如果您必须更改编程语言,那么在已经有排序算法的情况下开始实现排序算法对您当前使用的语言(如C)进行优化,对我来说没有意义。如果你已经知道你将使用哪种语言,那么考虑语言可以用来解决你的问题的工具。

你能解释LINQ有什么问题吗?但是这是一个帮助方法,我想远离它,而使用我自己的算法来用一个键来排列一个对象列表。通过稍后更改编程语言,我可能无法使用Linqs方法。所以我期待着拥有我自己的所有类,因为它不再依赖于库。如果你改变编程语言,那么就不可能有列表类或类。考虑不要使用集合和类,那就是为什么我要问。也许它更有效,在BasicObject之间使用数组或某种连接……使用您现在使用的语言和框架的能力更有效。此外,我相信所有高级语言都具有对集合进行排序的内置功能
orderedList = basicList.OrderByDescending(x => x.Key).ToList();
basicList.Sort((o1,o2) => o1.Key.CompareTo(o2.Key));