【发布时间】:2015-12-31 20:30:16
【问题描述】:
当前代码接受如下输入:
[[:k1 0] [:k1 1] [:k2 2]]
并在列表中组织具有相同关键字的项目:
(([:k1 0] [:k1 1]) ([:k2 2]))
以下代码有效,但我觉得可以改进。嵌套的
map #(filter 看起来很难看,我想我可以使用 clojure for 函数以优雅的代码产生相同的结果。
如何提高可读性?
(defn list-of-equals [itens]
(let [get-key (fn [[k]] k)
keys (->> itens (map get-key) distinct)
pairs (map #(filter (fn [[k]]
(= % k)) itens) keys)]
pairs))
【问题讨论】:
-
(vals (group-by first itens)) -
嗯,这看起来可读._。谢谢
-
抱歉,如果我能抽出时间写出完整解释为什么会替换代码,我会
-
您的算法由于其复杂性而需要改进。在这种情况下,可读性是第二个问题。请注意,它需要遍历在
O(n²)中执行的每个不同键的整个序列。 @noisesmith 解决方案解决了这两个问题。