映射clojure地图

Zau*_*bov 2 collections clojure map

我一直在尝试用mapClojure中的作用,并想知道,什么是应用的最佳实践mapmap集合,因此:

(map #(pprint (str %1 " " %2)) {:hello 1 :world 2})
Run Code Online (Sandbox Code Playgroud)

输出(订单现在并不重要):

:hello 1
:world 2
Run Code Online (Sandbox Code Playgroud)

我的主意是:

(def my-map {:hello 1 :world 2})
(map #(pprint (str %1 " " %2)) (keys my-map) (vals my-map))
Run Code Online (Sandbox Code Playgroud)

但!我没有在文档中找到任何证据证明Clojure(或例如ClojureScript)保证序列keysvals序列是相互保留的.

另一个想法是:

(map #(pprint (str (first %1) " " (rest %1))) my-map)
Run Code Online (Sandbox Code Playgroud)

这不是那么好,因为它与普通%1%2.

我相信有更好的方法来做到这一点.如果你知道的话,请你分享一下吗?提前致谢!

Mic*_*zyk 5

keysvals给出相同的顺序.

或者,您可以在地图的条目之间映射函数:

(map (fn [[k v]] ...) {:foo 1 :bar 2})
Run Code Online (Sandbox Code Playgroud)

或使用reduce-kv:

(reduce-kv (fn [_ k v] ...) nil {:foo 1 :bar 2})
Run Code Online (Sandbox Code Playgroud)