接收数据的最佳排序方法?

时间:2014-07-10 15:57:39

标签: c# list sorting dictionary

在我的计划中,我将收到数据元组:(Value, Order)。我想通过在列表或字典中升序Order来对所有元组进行排序。我在一个循环中逐个获取元组。

对元组进行排序的最有效方法是什么?当我逐个接收它们,然后将它们插入列表或字典中时,我已经考虑过对元组进行排序;或者我可以先在一个列表或字典中收集所有元组,然后对它们进行排序。哪种方法最好?

另外,我不确定列表或字典是否最适合存储此信息,或者使用任何一个列表或字典之间是否存在显着差异。

编辑:我应该注意,排序后,我需要生成一个包含所有Value s的字符串。

3 个答案:

答案 0 :(得分:1)

您可能对SortedDictionary课程感兴趣:

 SortedDictionary<string, string> dict = 
        new SortedDictionary<string, string>();

正如MSDN所说:

  

SortedDictionary具有(...)未排序数据的插入和删除操作:O(log n)

所以它会比添加所有元组然后用O(n log n)复杂度对它们进行排序更快。

答案 1 :(得分:0)

您可以使用SortedDictionary,它可能比您更快地完成工作。数据结构的类型取决于您将如何访问或查询数据

答案 2 :(得分:0)

您可以使用SortedList或SortedDictionary。 差异是explained here

  

SortedDictionary通用类是二进制搜索   具有O(log n)检索的树,其中n是元素的数量   字典。在这方面,它类似于SortedList泛型类。这两个类具有相似的对象模型,并且   两者都有O(log n)检索。两个班级不同的地方是   记忆的使用和插入和移除的速度:

     

•SortedList使用的内存少于SortedDictionary。

     

•SortedDictionary具有更快的插入和删除功能   未排序数据的操作:O(log n)而不是O(n)   排序列表。

     

•如果列表是从排序数据中一次性填充的,   SortedList比SortedDictionary快。

     

每个键/值对都可以作为KeyValuePair检索   结构,或通过非泛型IDictionary作为DictionaryEntry   接口

     

键必须是不可变的,只要它们被用作键中的键   SortedDictionary。 SortedDictionary中的每个键都必须是唯一的。键不能为null,但值可以为if   值类型TValue是引用类型。

     

SortedDictionary需要比较器实现   进行关键比较。您可以指定的实现   通过使用接受a的构造函数的IComparer泛型接口   比较参数;如果你没有指定一个实现,那么   使用默认通用比较器Comparer.Default。如果输入TKey   实现System.IComparable泛型接口,默认   comparer使用该实现。