我正在使用 Emacs Lisp,但已经cl
加载了包,以获取一些常见的 lisp 功能。
我有一个包含多达 50K 条目的哈希表,整数键映射到三元组,像这样(但在实际的 lisp 中):
{
8 => '(9 300 12)
27 => '(5 125 9)
100 => '(10 242 14)
}
三元组中的第二个值是在构建哈希表的复杂算法期间计算的分数。我需要从哈希中收集所有键的常规 lisp 列表,按分数排序(即所有键按值的 cadr 排序)。
因此,对于上述内容,我需要此列表:
'(27 100 8)
我目前分两个阶段进行此操作,感觉效率低于所需。
有没有好的方法来做到这一点?
我当前的解决方案用于maphash
将键和值收集到两个新列表中,然后sort
以正常方式执行,参考谓词中的分数列表。然而,感觉就像我可以将集合和排序结合在一起。
编辑 | 我也不喜欢使用哈希表,尽管我确实需要整数键的恒定访问时间,它们不是线性间隔的。
编辑 2| 看起来实现二叉树排序可以工作,其中树中的标签是分数,值是键......这样我在映射哈希时进行排序。
... 继续阅读关于排序算法的维基百科页面