Rom*_*om1 2 merge join clojure
我有一个看起来像这样的数据结构:
(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}]})
Run Code Online (Sandbox Code Playgroud)
我想加入的地图,:devices
并:layout
通过键(特别是:alias
)充实与布局信息的设备.
现在我拼凑了以下解决方案:
(map (partial reduce merge) (vals (group-by :alias (concat (:devices conf) (:layout conf)))))
Run Code Online (Sandbox Code Playgroud)
这是一种惯用的联系还是其他更好的选择?
干杯
您可以使用命名空间中的join
函数clojure.set
:
(clojure.set/join (conf :devices) (conf :layout) {:alias :alias})
Run Code Online (Sandbox Code Playgroud)
请注意,返回值是一个集合.省略最后一个参数会导致自然连接; 看(doc clojure.set/join)
详情.