首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射clojure映射

映射clojure映射
EN

Stack Overflow用户
提问于 2013-06-11 18:10:51
回答 2查看 254关注 0票数 2

我一直在尝试在Clojure中使用map函数,我想知道将map应用于map集合的最佳实践是什么,以便:

代码语言:javascript
复制
(map #(pprint (str %1 " " %2)) {:hello 1 :world 2})

输出(现在顺序并不重要):

代码语言:javascript
复制
:hello 1
:world 2

我的第一个想法是:

代码语言:javascript
复制
(def my-map {:hello 1 :world 2})
(map #(pprint (str %1 " " %2)) (keys my-map) (vals my-map))

但!我在文档中没有发现任何证据表明Clojure (或例如ClojureScript)保证keysvals序列的顺序是相互保持的。

另一个想法是:

代码语言:javascript
复制
(map #(pprint (str (first %1) " " (rest %1))) my-map)

这并不像普通的%1%2那样好。

我相信有一种更好的方法可以做到这一点。如果你知道的话,你能分享一下吗?提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-11 18:33:13

keysvals确实给出了相同的命令。

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

代码语言:javascript
复制
(map (fn [[k v]] ...) {:foo 1 :bar 2})

或者使用reduce-kv

代码语言:javascript
复制
(reduce-kv (fn [_ k v] ...) nil {:foo 1 :bar 2})
票数 5
EN

Stack Overflow用户

发布于 2013-06-11 21:43:46

map用于在集合上惰性地应用函数以生成新的集合。我会在你真正需要得到的集合时使用它。

但在本例中,您只是枚举k/v对,以避免pprint的副作用,因此请考虑改用doseq

代码语言:javascript
复制
(doseq [[k v] {:hello 1 :world 2}]
  (pprint (str k " " v)))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17041616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档