clojure:如何从懒惰的seq中获取值?

时间:2013-08-07 15:08:54

标签: clojure lazy-sequences

我是clojure的新手,需要一些帮助来从懒惰序列中获取值。

您可以在此处查看我的完整数据结构:http://pastebin.com/ynLJaLaP 我需要的是标题的内容:

{: _content AlbumTitel2}

我设法获得了所有_content值的列表:

(def albumtitle (map #(str (get % :title)) photosets))
(println albumtitle)

结果是:

({:_content AlbumTitel2} {:_content test} {:_content AlbumTitel} {:_content album123}   {:_content speciale} {:_content neues B5 Album} {:_content Album Nr 2})

但是我怎样才能得到每一个的价值:_content?

任何帮助将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:7)

你可以这么做

(map (comp :_content :title) photosets)

关键字作为函数使用,因此包含comp的合成将首先检索每个photoset的:title值,然后进一步检索该值的:_content值。

或者这可以写成

(map #(get-in % [:title :_content]) photosets)

答案 1 :(得分:1)

半替代解决方案是

(->> data
 (map :title) 
 (map :_content))

这取决于关键字是函数和所谓的线程最后一个宏这一事实。它的作用是将第一个表达式的结果作为第二个等的最后一个参数注入。

以上代码转换为

(map :_content (map :title data))

显然不具备可读性,也不容易在以后扩展。

PS我将数据粘贴到网上时出现问题,因为:

{: _content AlbumTitel2}

不是Clojure语法,但这是:

{:_content "AlbumTitel2"}  

在文本之后没有空格:和“”。以防你可能想要在其他时间粘贴一些Clojure。