2

次のようなデータ構造があります。

(def conf 
  { :devices [{:alias "OSC Sender",
               :name "OSC Sender",
               :ins [{:name "xpos", :type :int, :mutable true}]},
              {:alias "const2", :name "const",
               :outs [{:name "out", :type :int}]}],
    :connections {"const2.out" "OSC Sender.xpos"},
    :layout [{:alias "const2",
              :x 72.12447405329594,
              :y 99.88499298737729},
             {:alias "tick",
              :x 82.5732819074334,
              :y 133.91374474053296},
             {:alias "OSC Sender",
              :x 185.17741935483872,
              :y 113.90322580645162}]})

:devicesマップを:layoutキー (特に:alias) で結合して、レイアウト情報でデバイスを充実させたいと考えています。

今、私は次の解決策を石畳にしました:

(map (partial reduce merge) (vals (group-by :alias (concat (:devices conf) (:layout conf)))))

それは慣用的な結合ですか、それとも他の何かが望ましいですか?

乾杯

4

1 に答える 1

7

名前空間joinから関数を使用できます。clojure.set

(clojure.set/join (conf :devices) (conf :layout) {:alias :alias})

戻り値はセットであることに注意してください。最後の引数を省略すると、自然結合になります。詳細については、を参照(doc clojure.set/join)してください。

于 2012-08-18T15:21:15.050 に答える