memo->clojure.set

 clojure-1.1.0のset一覧のメモ


clojure.contrib.setの関数がどうして少ないのかと思ったらclojre.setが有りましたよ><
clojure.set API reference (Clojure)

union,intersection,difference

 和集合、共通集合、差集合

(use 'clojure.set)

(union        #{1 2 3 4 5} #{3 4 5 6 7}) ;=> #{1 2 3 4 5 6 7}
(intersection #{1 2 3 4 5} #{3 4 5 6 7}) ;=> #{3 4 5}
(difference   #{1 2 3 4 5} #{3 4 5 6 7}) ;=> #{1 2}

select

 選択

(select even? #{0 1 2 3 4 5 6 7 8 9}) ;=> #{0 2 4 6 8}

project,index

 mapを内包したsetの構造ってどんな時に用いるんだろう?

(def xs #{{:a 11 :b 1 :c 1 :d 4}
         {:a 2 :b 12 :c 2 :d 6}
         {:a 3 :b 3 :c 3 :d 8 :f 42}})

;(doc project)
(project xs [:c]) ;=> #{{:c 3} {:c 2} {:c 1}}

(index xs [:c])   ;=> {{:c 2} #{{:a 2, :b 12, :c 2, :d 6}},
                  ;    {:c 3} #{{:a 3, :b 3, :c 3, :d 8, :f 42}},
                  ;    {:c 1} #{{:a 11, :b 1, :c 1, :d 4}}}

rename-keys,rename

 よく解らん><


map-invert

 マップのkeyとvalueの交換

(map-invert {:a 2 :b 3 :c 5 :d 7}) ;=> {7 :d, 5 :c, 3 :b, 2 :a}

join

 結合

(def a #{{:a 1 :b 2}})
(def b #{{:c 3 :d 4}})

(join a b) ;=> #{{:d 4, :c 3, :a 1, :b 2}}
;追加1
(def a #{{:a 1 :b 2},{:n 9 :m 11}})
(def b #{{:c 3 :d 4},{:x 5 :y 7}})

(join a b) ;=> #{{:y 7, :x 5, :n 9, :m 11}
           ;     {:y 7, :x 5, :a 1, :b 2}
           ;     {:d 4, :c 3, :n 9, :m 11}
           ;     {:d 4, :c 3, :a 1, :b 2}}

 おいおい修正>A<

  1. joinに追加1
    1. set-keymapsの、組み合わせみたい