1

私は 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 の値を取得するにはどうすればよいでしょうか?

どんな助けでも大歓迎です!

ありがとう!

4

2 に答える 2

7

あなたは単にこれを行うことができます

(map (comp :_content :title) photosets)

キーワードは関数として機能するため、 を使用した合成でcompは、最初:titleに各写真セットの値を取得し、次にその値の値をさらに取得:_contentします。

あるいは、これは次のように書くこともできます

(map #(get-in % [:title :_content]) photosets)
于 2013-08-07T15:18:15.397 に答える
1

半代替ソリューションは行うことです

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

これは、キーワードが関数であり、いわゆるスレッド ラスト マクロであるという事実を利用しています。それが行うことは、最初の式の結果を 2 番目の最後の引数として挿入することです。

上記のコードは次のように変換されます

(map :_content (map :title data))

明らかに読みにくく、後で拡張するのも簡単ではありません。

PSデータがWebに貼り付けられたときに何か問題が発生したと思います。理由は次のとおりです。

{: _content AlbumTitel2}

Clojure 構文ではありませんが、これは次のとおりです。

{:_content "AlbumTitel2"}  

: の後の空白、およびテキストの周囲の "" はありません。Clojure を別の機会に貼り付けたい場合に備えて。

于 2013-08-08T10:26:08.340 に答える