2013-08-07 3 views
1

Iam new to clojure и нужна помощь, чтобы получить значение из ленивой последовательности.clojure: как получить значения от ленивого seq?

Вы можете посмотреть на мою полную структуру данных здесь: 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?

Любая помощь будет оценена!

Спасибо!

ответ

7

Вы могли бы просто сделать это

(map (comp :_content :title) photosets) 

Ключевые слова работают как функции, так что композиция с comp будет первым получить значение каждого фотосет :title, а затем дополнительно получить значение этой величины :_content.

В качестве альтернативы это может быть записана в виде

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

Полупроницаемая альтернативное решение сделать

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

Это займет ухаживания тот факт, что ключевые слова являются функциями и так называемый поток последний макрос. Что она делает это инъекционным результат первого выражения в качестве последнего аргумента второй и т.д ..

Приведенный выше код преобразуется в

(map :_content (map :title data)) 

явно не читаемыми, а не легко расширить позже или.

PS Я предполагаю, что-то пошло не так, когда данные были вставлены в Интернете, потому что:

{: _content AlbumTitel2} 

Не синтаксис Clojure, однако это касается:

{:_content "AlbumTitel2"} 

Нет пробельные после:, и "" вокруг текста. На всякий случай вы можете захотеть вставить некоторые Clojure в другое время.

Смежные вопросы