Clojure:通过一次迭代从地图中重命名和 select 键
Clojure: Rename and select keys from map with one iteration
在 Clojure 中,我想重命名映射中的键和 select 键。
简单的方法是:
(-> m
(rename-keys new-names)
(select-keys (vals new-names)))
但这会遍历整个地图两次。
有没有一种方法可以一次迭代完成?
当然,有一种方法可以通过一次迭代完成。
您可以使用 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 from algo.generic
library:
(fmap m (map-invert new-names))
在 Clojure 中,我想重命名映射中的键和 select 键。 简单的方法是:
(-> m
(rename-keys new-names)
(select-keys (vals new-names)))
但这会遍历整个地图两次。 有没有一种方法可以一次迭代完成?
当然,有一种方法可以通过一次迭代完成。
您可以使用 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 from algo.generic
library:
(fmap m (map-invert new-names))