初めてみた
(merge-with list maps)
単一の値を持つマップで機能しますが、次のような場合
{:a [1 2]} {:a [2 3]} {:a [3 4]}
それは私に与えます
{:a (([1 2] [2 3]) [3 4])}
しかし、私はしたいです
{:a ([1 2] [2 3] [3 4])}
マップの値をベクトルでラップできることがわかりました。
(defn my-merge
[& coll]
(let [maps (map #(assoc % (first (keys %)) [(first (vals %))]) coll)]
(apply merge-with concat maps)))
しかし、let バインディングはネストしすぎているようです。concat の代わりに使用できる簡単な関数はありますか? したがって、次のような1行のコードを作成できます。
(merge-with the-function maps)