Dictionary 如何在不知道Clojure中的键的情况下将映射分解为键值对?
假设我有一张这样的地图Dictionary 如何在不知道Clojure中的键的情况下将映射分解为键值对?,dictionary,clojure,destructuring,Dictionary,Clojure,Destructuring,假设我有一张这样的地图 {:a 1 :b 2 :c 3} 我想这样映射(注意-非工作伪代码): 如果不先获取函数的键,映射这些键并从函数中读回它们,这是可能的吗 我的问题是:如何在不知道Clojure中的键的情况下将映射分解为键值对?当在映射上映射时,每个元素都是包含两个值的向量:键和值。使用如下向量分解每个元素: (def m {:a 1 :b 2 :c 3}) (map (fn [[key value]] (str "key: " key " > value: " value-a))
{:a 1 :b 2 :c 3}
我想这样映射(注意-非工作伪代码):
如果不先获取函数的键,映射这些键并从函数中读回它们,这是可能的吗
我的问题是:如何在不知道Clojure中的键的情况下将映射分解为键值对?当在映射上映射时,每个元素都是包含两个值的向量:键和值。使用如下向量分解每个元素:
(def m {:a 1 :b 2 :c 3})
(map (fn [[key value]] (str "key: " key " > value: " value-a)) m)
请注意,传递给map
的函数返回一个字符串值,而不是调用println
,因为我们试图通过对每个值应用函数来转换传入的集合。您可以将map
返回的集合传递到prn
以调试该值,尽管REPL将为您打印出来
(seq {:a 1 :b 2 :c 3})
;([:a 1] [:b 2] [:c 3])
在映射上调用seq
,可以得到一系列键值对。seq
调用通常是隐式的
成对的
- 不需要在输入的订单中李>
- 实际上是
s,它们的行为是成对的李>MapEntry
(mapcat (fn [[:key key-a][:value value-a]] (println "key: " key-a "\n value: " value-a )))
。。。需要几次修理:
- 提供省略的最终参数-映射到的集合 应用
- 只需将每个
分解为一对即可获得MapEntry
关键和价值李> - 使用
而不是map
将函数应用于每对。 幸运的是,mapcat
可以正常工作李>mapcat
- 使用
强制序列求值,并将其作为 确实如此。REPL为您执行前者,但运行 应用程序不需要李>dorun
(dorun
(map
(fn [[key-a value-a]] (println "key: " key-a " value: " value-a ))
{:a 1 :b 2 :c 3}))
哪张照片
。。。并返回nil
(mapcat (fn [[:key key-a][:value value-a]] (println "key: " key-a "\n value: " value-a )))
(dorun
(map
(fn [[key-a value-a]] (println "key: " key-a " value: " value-a ))
{:a 1 :b 2 :c 3}))
key: :a value: 1
key: :c value: 3
key: :b value: 2