【发布时间】:2017-03-14 22:44:47
【问题描述】:
我有一个问题,我有一些代表时间的键和一些值。一个小例子:
(sorted-map -4 "a" -1 "b" 2 "c" 3 "d")
对于给定的 x,我想找到小于或等于 x 的最大键。
例如,在 Julia DataStructures 包中有一个排序字典,其方法如下:
searchsortedlast(sc,k) 参数 sc 是 SortedDict、SortedMultiDict 或 SortedSet 和 k 是一个键。此例程返回 容器中键小于或等于 k 的最后一项。如果 没有这样的密钥,则返回启动前的半令牌。 时间:O(c log n)
我一直在尝试在 clojure 中查找有关类似功能的文档,但没有找到任何东西。 我的幼稚做法如下:
(apply max (filter #(
但我认为这是次优的,因为它首先收集所有键,然后过滤它们,从而产生不必要的计算。
我的问题是 1)是如果已经有一个我找不到的实现这个的函数。 2)如果不是这种情况,我是否应该搜索 Java 数据结构并使用 java 数据结构和相关方法 3) 是否可以让我的方法变得懒惰以提高效率?
编辑:
来自 Java 的 TreeMap:
K floorKey(K key) 返回小于等于 给定键,如果没有这样的键,则返回 null。
这就是我使用 clojure sorted-map 寻找的东西。我应该放弃 sorted-map 并使用 Java 树状图吗?
EDIT2:
我发现了这个 https://github.com/clojure/data.avl 它提供了一种具有“最近键”功能的替代排序映射实现
【问题讨论】:
标签: java data-structures clojure functional-programming