以下に示すように、clojureマップを文字列、ほぼキーと値のペアに変換するにはどうすればよいですか:
Clojure データ:
(def data { :starks "Winter is coming" :Lannisters "Hear me roar" })
上記を変換したい
"starks" "winter is coming" "Lannisters" "hear me roar"
間に識別子/区切り文字は必要ありませんが、"starks"
常に続く必要があることは明らかです"winter is coming"
私はこれを試しました:
(str (keys data) (vals data))
これは次のように出力されます:
"(:starks :Lannisters)(\"Winter is coming\" \"Hear me roar\")"
それは私がまったく望んでいないものです...
- マップ データのキーと値は常に同じとは限らないため、汎用的である必要があります
- 値にはネストされたマップが含まれないなどのように、常に1つのレベルしかありません..
編集
私が実際にやろうとしていること:
Clojure を使用して、数千のNeo4jノードのインデックスを作成しようとしています。このタスクを支援するために、私はNeocons Clojure neo4jライブラリを使用しています。
ドキュメントによると、は次のadd-to-index
ようなプロパティと値を受け入れます。
(nn/add-to-index (:id node) (:name idx) "username" "joe")))
上記の場合、これは次のようになります
(nn/add-to-index (:id node) (:name idx) "starks" "winter is coming" "Lannisters" "Hear me roar")))
これでノードができました。ノードのプロパティにアクセスでき、(:data node)
それによって clojure マップが得られます。
プロパティはノードごとにかなり異なるため、ライブラリが理解できる方法でそのマップをライブラリに渡す方法を見つけようとしています..
Marius Danilaの答えは、私をほぼそこに導きました。
やっている
(map name (apply concat data))
結果の周りに中かっこがあるため、3番目のパラメーターについてはまだ不平を言っています。
では、どうすればこれを達成できますか?自分でプロパティを構築するには、大量のif-not
ブロックを作成する必要がありますか?
ありがとう