几个星期前我开始学习一些函数式编程,我正在尝试从一个映射列表到一个列表中的映射,考虑到clojure中的特定键.
我的地图列表如下: '({:a "a1" :b "b1" :c "c1"} {:a "a2" :b "b2" :c "c2"} {:a "a3" :b "b3" :c "c3"})
我想要的输出是:'("b1" "b2" "b3").
我尝试过以下方法:
(doseq [m maps]
(println (list (get m :b))))
Run Code Online (Sandbox Code Playgroud)
我的输出是一个列表列表(我正在为每次迭代创建一个列表,这是预期的).所以我的问题是,如何将其减少到一个列表?
更新
刚试过以下内容:
(let [x '()]
(doseq [m map]
(conj x (get m :b))))
Run Code Online (Sandbox Code Playgroud)
但是,它仍然无法正常工作.我没有得到重点,因为我期望将元素附加到空列表中
这是生产Clojure代码中非常常见的模式,因此它是一个学习的好地方.一般情况下,请查看https://clojure.org/reference/sequences上关于序列的文档,当遇到类似的任务时,请查看哪个模式最适合并探索该组中的函数.在这种情况下,它是"处理seq的每个项目以创建新的seq",列出的第一个项目是map
你的例子可能看起来像
(map :b my-data)
Run Code Online (Sandbox Code Playgroud)