我有一个字典(字符串,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
{
}
这个词典的大小非常大,大多数应用程序瓶颈似乎都在这里。当项目被添加到字典中或者更有效地对项目进行排序时,有没有办法保持字典排序?
答案 0 :(得分:2)
更合适的解决方案是,当您从字典中读取而不是将其保存在内存中时,通过排序来执行您已经在做的事情。我建议将排序结果缓存为List
,但要减少开销量。
答案 1 :(得分:1)
如果你必须按IDictionary的值部分中的项重复排序,那么你做错了,至少对于大型数据集。
使用一个容器,它允许您以正确的顺序在插入时存储数据(例如SortedList,使用自定义比较器)或您随后的List。根据需要进行排序(同样,使用自定义)比较器)。这实际上取决于您添加数据的频率以及需要重新排序的频率。你必须为此做出衡量。