相关疑难解决方法(0)

内部加入clojure

可以说我有

(def test-left 
                            [{:name "Sean" :age 27} 
                             {:name "Ross" :age 27} 
                             {:name "Brian" :age 22}])
Run Code Online (Sandbox Code Playgroud)

(def test-right 
                        [{:owner "Sean" :item "Beer"} 
                         {:owner "Sean" :item "Pizza"} 
                         {:owner "Ross" :item "Computer"} 
                         {:owner "Matt" :item "Bike"}])
Run Code Online (Sandbox Code Playgroud)

当我这样做时,(clojure.set/join test-left test-right)我会得到一个笛卡尔积.12排.我想要的是内连接:左边的名字=:右边的所有者,这样我只得到那些在右边有匹配行的结果

所以我明白了

              [{:name "Sean" :age 27  :item “Beer” } 
               {:name "Sean" :age 27  :item “Pizza” }
               {:name "Ross" :age 27  :item “Computer”}]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗.同样想要实现左右外连接,但那是separete问题.我正在学习clojure,所以请耐心等待

clojure

9
推荐指数
1
解决办法
760
查看次数

惯用地图加入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)

这是一种惯用的联系还是其他更好的选择?

干杯

merge join clojure

2
推荐指数
1
解决办法
685
查看次数

标签 统计

clojure ×2

join ×1

merge ×1