gpt4 book ai didi

sorting - Clojure 对值进行排序映射

转载 作者:行者123 更新时间:2023-12-02 10:29:53 25 4
gpt4 key购买 nike

我正在尝试根据值对 map 进行排序。

输入映射如下所示:

{:Blabla 1, :foo 1, :bla-bla 1, :Bla 2, :bla/bla 1, :bla 4, :blub 2, :hello 1, :Foo 2}

输出应如下所示:

{:bla 4 :Bla 2 :blub 2 :Foo 2 :Blabla 1 :bla-bla 1 :bla/bla 1 :foo 1 :hello 1}

我使用了sorted-map-by,就像这里的文档中一样: http://clojuredocs.org/clojure.core/sorted-map-by

(defn sort-keyword-list [texts]
(let [results (word-counts texts)]
;results is now {:Blabla 1, :foo 1, :bla-bla 1, :Bla 2, :bla/bla 1, :bla 4, :blub 2, :hello 1, :Foo 2}
(into (sorted-map-by (fn [key1 key2]
(compare [(get results key2) key2]
[(get results key1) key1])))
results))
)

嗯,我发现只有当关键字内部没有“/”或“-”等特殊字符时,此解决方案才有效。这是一个已知的错误吗?

那么如何在不编写自己的缓慢排序算法的情况下快速按值对映射进行排序呢?

最佳答案

在我的 Clojure 1.6.0 REPL 中,问题中的代码已经按值排序:

user=> (into (sorted-map-by (fn [key1 key2]
(compare [(get x key2) key2]
[(get x key1) key1])))
x)
{:bla 4, :blub 2, :Foo 2, :Bla 2, :bla/bla 1, :hello 1, :foo 1, :bla-bla 1, :Blabla 1}

如果您希望具有相同值的条目按键排序,则需要对键进行字符串化。原因如下:

user=> x
{:bla-bla 1, :Blabla 1, :bla/bla 1, :hello 1, :bla 4, :foo 1, :Bla 2, :Foo 2, :blub 2}
user=> (sort (keys x))
(:Bla :Blabla :Foo :bla :bla-bla :blub :foo :hello :bla/bla)
user=> (sort (map str (keys x)))
(":Bla" ":Blabla" ":Foo" ":bla" ":bla-bla" ":bla/bla" ":blub" ":foo" ":hello")

关于sorting - Clojure 对值进行排序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com