ruby->clojure[.contrib]?.set
union,intersection,difference
require 'set' a = Set[1,2,3,4,5] b = Set[3,4,5,6,7] p a + b #=> #<Set: {5, 6, 1, 7, 2, 3, 4}> p a & b #=> #<Set: {5, 3, 4}> p a - b #=> #<Set: {1, 2}> #p a.union b #p a.intersection b #p a.difference b
select
実装するとしたら、こんな感じ。
p Set[0,1,2,3,4,5,6,7,8,9].map!{|n| n.even? ? n : nil}.delete(nil) #=> #<Set: {0, 6, 2, 8, 4}>
project,index
rename-keys,rename
map-invert
keyとvalueの入れ替えするとなると、こんな感じかな。
#h = {};{:a=>2,:b=>3, :c=>5, :d=>7}.map{|k,v| h[v] = k} {:a=>2,:b=>3, :c=>5, :d=>7}.inject({}){|r,i| r[i[1]] = i[0]; r } #=>{5=>:c, 7=>:d, 2=>:a, 3=>:b}
join
subset?,superset?,proper-subset?,proper-superset?
p Set[1,2,3].subset? Set[ 2,3 ] #=> false p Set[1,2,3].subset? Set[1,2,3] #=> true p Set[ 2,3 ].subset? Set[1,2,3] #=> true p Set[1,2,3].superset? Set[ 2,3 ] #=> true p Set[1,2,3].superset? Set[1,2,3] #=> true p Set[ 2,3 ].superset? Set[1,2,3] #=> false p Set[1,2,3].proper_subset? Set[ 2,3 ] #=> false p Set[1,2,3].proper_subset? Set[1,2,3] #=> false p Set[ 2,3 ].proper_subset? Set[1,2,3] #=> true p Set[1,2,3].proper_superset? Set[ 2,3 ] #=> true p Set[1,2,3].proper_superset? Set[1,2,3] #=> true p Set[ 2,3 ].proper_superset? Set[1,2,3] #=> false
アイデア募集中><
*1:集合使わないので、内容は新鮮^^だが面白くない><