【问题标题】:Clojure order hash map by value using key name as tiebreakerClojure 按值排序哈希映射,使用键名作为决胜局
【发布时间】:2016-12-04 17:51:36
【问题描述】:

我希望能够通过键的值对哈希映射进行排序,在出现平局时使用键名本身

我有一个取自 Clojure wiki https://clojuredocs.org/clojure.core/sorted-map-by#example-542692d5c026201cdc327094 的排序函数

(defn order-map [target]
  (into (sorted-map-by (fn [key1 key2]
                         (compare [(target key2) key2]
                                  [(target key1) key1]))) target))

目前我可以做到

(-> "notarealroom" frequencies order-map)

哪个输出

{\o 3, \r 2, \a 2, \t 1, \n 1, \m 1, \l 1, \e 1}

但我希望能够对具有相同值的那些键进行排序,例如\r\a 按字母顺序给出如下内容...

{\o 3, \a 2, \r 2, \e 1, \l 1, \m 1, \n 1, \t 1}

我不确定如何修改比较函数来处理这种抢七场景

【问题讨论】:

  • 你在做 Advent of Code 吗?我也解决了这个问题,但不需要排序图。只需对频率的结果进行排序就足够了。如果您想要我的完整解决方案,请查看github.com/borkdude/aoc2016
  • 你猜对了,我只是想改进我的基本 Clojure。您的解决方案非常简洁!非常感谢您的指点

标签: clojure


【解决方案1】:

你快到了。以下应该做正确的事情:

(defn order-map [target]
  (into (sorted-map-by (fn [key1 key2]
                         (compare [(target key2) key1]
                                  [(target key1) key2]))) target))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多