Zau*_*bov 2 collections clojure map
我一直在尝试用mapClojure中的作用,并想知道,什么是应用的最佳实践map的map集合,因此:
(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)保证序列keys和vals序列是相互保留的.
另一个想法是:
(map #(pprint (str (first %1) " " (rest %1))) my-map)
Run Code Online (Sandbox Code Playgroud)
这不是那么好,因为它与普通%1和%2.
我相信有更好的方法来做到这一点.如果你知道的话,请你分享一下吗?提前致谢!
keys并vals给出相同的顺序.
或者,您可以在地图的条目之间映射函数:
(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)