マージ:私はトラブル次のような問題の解決策を見つけることを抱えている2つの複雑なデータ構造に
(def defaults {
:name "John"
:surname "Doe"
:info {:date-of-birth "01-01-1980"
:registered [{:type "newsletter" :name "breaking news" }]}
})
そして私は、同様の構造化されたマップを渡すが、私がしたい:
は、私はマップを考えてみましょうベクトルをconjoinとキーの残りの部分を上書き:
(def new {
:name "Peter"
:info {:date-of-birth "11-01-1986"
:registered [{:type "alert" :name "mobile-alert" }]}
})
そして、私はこの結果をしたい:
{:name "Peter"
:surname "Doe"
:info {:date-of-birth "11-01-1986"
:registered [{:type "newsletter" :name "breaking news" }
{:type "alert" :name "mobile-alert" }]}}
今、私のような静的な構文を使用して簡単に行うことができます。
(reduce conj (get-in defaults [:info :registered]) (get-in new [:info :registered]))
(より良い方法はおそらくあります...)しかし、私は次のプロパティを持つ動的な機能の多くを期待していた:
をキーのvalがベクトルである場合- はその後、右のマップ
- からの値を持つ任意のキー構造に
- アップデートを知らなくても、両方のマップからすべてのキーをキープ
conj
右のマップのベクトルとベクトル(適切なキーは、もちろん存在する場合)事前に助けを
感謝:)
+1完全に「merge-with」を忘れました。 –
完全に動作します。私はそれがマージと何か関係があると思ったが、私はそれを理解できなかった...乾杯! –