从复杂的评分过程中我得到了一个TDictionary结构:
target_results : TDictionary<longint, double>;
该键表示MySQL表中记录的id。从该ID我可以检索归档和文件名。我需要通过以下选项之一提供这些结果:
1. dictionary value (solved: I'm doing this by assigning the dictionary to an array, sorting it and then retrieving the filename and date for each result, from the database)
2. filename
3. filedate
我正在考虑使用TVirtualTable(来自Devart),因为我已经在这个项目中使用了UniDAC。有人可以建议更快,更灵活,更原生的方法吗?
答案 0 :(得分:1)
您无法对字典进行排序。唯一具有排序内置的可比结构是Judy阵列。但是,您可以对字典指向的项进行排序。如果我理解正确的话,您似乎已经对键进行了排序。现在,如果要按不同的方式排序,则对其他数据执行相同操作。算法将是:
请记住,这将是迭代的O(N),其中N不仅是数据库中的项目数,而且是散列表中的桶数。然后还有额外的开销,即从数据库中为每个项目生成数据,最后有O(NLogN)进行快速排序。
TDictionary因为所有哈希表都是用于查找的,所以它很擅长并且在其他任务(例如迭代甚至排序)上都很糟糕。如果你想加快速度,可以使用按适当的键排序的单独列表,这样你就可以迭代已排序的列表并从数据库中获取数据。如果排序非常重要且完成了很多次,那么使用二叉树而不是哈希表。每个搜索字段可以有一个二叉树。对于二叉树,我的意思是平衡的二叉树,如AVL树。
例如二进制树对此有好处,因为它们在插入时保持排序。没有更多可用数据,无法帮助您。