Clojure:通过一次迭代重命名并从地图中选择键

时间:2015-05-12 09:09:05

标签: clojure

在Clojure中,我想要从地图中重命名键和选择键。 简单的做法是:

(-> m
    (rename-keys new-names)
    (select-keys (vals new-names)))

但这会在整个地图上重复两次。 有没有办法用一次迭代来做到这一点?

1 个答案:

答案 0 :(得分:7)

当然,有一种方法可以通过一次迭代来完成。

您可以使用reduce-kv function

来完成
(reduce-kv #(assoc %1 %3 (get m %2)) {} new-names)

或只是for循环:

(into {} (for [[k v] new-names] [v (get m k)]))

如果您想要一段非常简单的代码,可以使用fmap function中的algo.generic library

(fmap m (map-invert new-names))