在我的计划中,我将收到数据元组:(Value, Order)
。我想通过在列表或字典中升序Order
来对所有元组进行排序。我在一个循环中逐个获取元组。
对元组进行排序的最有效方法是什么?当我逐个接收它们,然后将它们插入列表或字典中时,我已经考虑过对元组进行排序;或者我可以先在一个列表或字典中收集所有元组,然后对它们进行排序。哪种方法最好?
另外,我不确定列表或字典是否最适合存储此信息,或者使用任何一个列表或字典之间是否存在显着差异。
编辑:我应该注意,排序后,我需要生成一个包含所有Value
s的字符串。
答案 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使用该实现。