Linq履行订单
本文关键字:Linq | 更新日期: 2023-09-27 18:26:09
我有一个字典(字符串,UDT),其中UDT被定义为
// simplified structure
class UDT
{
public DateTime datetime;
public double size;
};
我不得不经常按时间和大小对这本词典进行排序。我现在正在做这样的事情-
var result = dict.OrderBy(x => x.Value.datetime).ThenBy(x => x.Value.size);
foreach (KeyValuePair<string, UDT> val in result
{
}
这个字典的大小很大,大部分应用程序瓶颈似乎都在这里。当项目被添加到字典中时,有什么方法可以保持字典的排序,或者更有效地排序吗?
一个更合适的解决方案是在从字典中读取时进行排序,而不是在内存中对其进行排序。不过,我建议将排序后的结果缓存为List
,以减少开销。
如果必须重复按IDictionary的值部分中的项进行排序,那么至少在大型数据集中是错误的。
使用一个容器,该容器允许您在插入时以正确的顺序存储数据(例如,SortedList,使用自定义比较器)或然后使用的List。根据需要进行排序(再次使用自定义比较器进行排序)。这实际上取决于您添加数据的频率以及需要重新排序的频率。你必须对此进行测量。