$B1sF#$G$9!#(B
2010$BG/(B11$B7n(B27$BF|(B18:45 Tanaka A. [email protected]:
enumerable $B$+$i(B hash $B$r@8@.$9$k%a%=%C%I$H$7$F(B
Enumerable#categorize $B$rDI2C$9$k$N$O$I$&$G$7$g$&$+!#(B
$B$_$s$J$HF1$846A[$G$9$,!“$d$O$j(B 1
$B%a%=%C%I$K5M$a9~$_2a$.$F$$$k$H;W$$$^$9!#(B
$B!VMWAG$NCj=P!W!VJ,N`=87W=hM}!W!V8e=hM}!W$N$&$A!”(B2
$BHVL$K9J$C$?$i$$$$$N$G$O(B
$B$J$$$G$7$g$&$+!#(B
[[1, 2], [1, 3], [2, 3]].aggregate #=> {1 => [2, 3], 2 =>
[3]}
[[1, 2], [1, 3], [2, 3]].aggregate(:op=>:+) #=> {1 => 5, 2 => 3 }
[[1, 2, 3]].aggregate #=> {1 => {2 => [3]} }
$B5DO@$N:.MpKI;_$N$?$a!"(Baggregate $B$H$$$&L>A0$K$7$F$$$^$9!#(B
$BB>$N8uJd$H$7$F$O!“(Bto_hash $B!”(Bhashtree $B$H$+$I$&$G$7$g$&!#(B
$B%3!<%J!<%1!<%9$O$3$s$J46$8$G$7$g$&$+!#(B
[[1, 2], [1, 2, 3]].aggregate #=> $BNc30(B
[].aggregate #=> {}
[[]].aggregate #=> $BNc30(B
[[1]].aggregate #=> $BNc30(B
$BB?>/(B categorize
$B$h$jD9$/$J$j$^$9$,!“2?$r$d$C$F$$$k$+$O$:$C$H$o$+$j$d$9$/(B
$B$J$k$H;W$$$^$9!#(B
$B0J2<!”(Bakr $B$5$s$NNc$r=q$-49$($F$_$^$7$?!#(B
ary = [[“matz”, “Yukihiro M.”],
[“nobu”, “Nobuyoshi N.”],
[“akr”, “Tanaka A.”],
[“usa”, “Usaku NAKAMURA”],
[“naruse”, “NARUSE, Yui”],
[“ko1”, “SASADA Koichi”]]
akr $B$5$sHG(B:
h = ary.categorize(1, 0)
h = ary.map {|k, v| [v, k] }.aggregate
#=> {“Yukihiro M.”=>[“matz”],
“Nobuyoshi N.”=>[“nobu”],
“Tanaka A.”=>[“akr”],
“Usaku NAKAMURA”=>[“usa”],
“NARUSE, Yui”=>[“naruse”],
“SASADA Koichi”=>[“ko1”]}
akr $B$5$sHG(B:
ary.categorize(lambda {|elt| elt[1] }, lambda {|elt| elt[0] })
h = ary.map {|elt| [elt[1], elt[0]] }.aggregate
#=> {“Yukihiro M.”=>[“matz”],
“Nobuyoshi N.”=>[“nobu”],
“Tanaka A.”=>[“akr”],
“Usaku NAKAMURA”=>[“usa”],
“NARUSE, Yui”=>[“naruse”],
“SASADA Koichi”=>[“ko1”]}
akr $B$5$sHG(B:
h = ary.categorize(lambda {|e| e[0][0] }, lambda {|e| e[0][1]}, 0)
h = ary.map {|e| [e[0][0], e[0][1], e[0]] }.aggregate
#=> {“m”=>{“a”=>[“matz”]},
“n”=>{“o”=>[“nobu”], “a”=>[“naruse”]},
“a”=>{“k”=>[“akr”]},
“u”=>{“s”=>[“usa”]},
“k”=>{“o”=>[“ko1”]}}
akr $B$5$sHG(B:
h = ary.categorize(lambda {|e| e[0][0] }, 1) {|ks, vs| vs.sort }
h = ary.map {|elt| [elt[0][0], elt[1]] }.aggregate
h.each {|ks, vs| h[ks] = vs.sort } # $B$^$?$O(B vs.sort!
#=> {“m”=>[“Yukihiro M.”],
“n”=>[“NARUSE, Yui”, “Nobuyoshi N.”],
“a”=>[“Tanaka A.”],
“u”=>[“Usaku NAKAMURA”],
“k”=>[“SASADA Koichi”]}
akr $B$5$sHG(B:
h = ary.categorize(1, 0) {|ks, vs|
raise “duplicate keys: #{ks.inspcet}” if vs.length != 1
vs[0]
}
h = ary.map {|k, v| [v, k] }.aggregate
h.each {|ks, vs|
raise “duplicate keys: #{ks.inspcet}” if vs.length != 1
h[ks] = vs[0]
}
#=> {“Yukihiro M.”=>“matz”,
“Nobuyoshi N.”=>“nobu”,
“Tanaka A.”=>“akr”,
“Usaku NAKAMURA”=>“usa”,
“NARUSE, Yui”=>“naruse”,
“SASADA Koichi”=>“ko1”}
akr $B$5$sHG(B:
h = ary.categorize(lambda {|e| e[0][0] }, lambda {|e| 1 }, :op=>:+)
h = ary.map {|e| [e[0][0], 1] }.aggregate(:op=>:+)
#=> {“m”=>1, “n”=>2, “a”=>1, “u”=>1, “k”=>1}
akr $B$5$sHG(B:
committers = open(“ruby-committers.yml”) {|f| YAML.load(f) }
pp committers.categorize(“account”, [“name”, “nick”]) {|ks, vs|
vs[0] }
h = committers.map {|e| [e[“account”], [e[“name”], e[“nick”]]]
}.aggregate
h.each {|ks, vs| h[ks] = vs[0] }
$BCf4VG[Ns$,$G$-$k$N$,7y!“$H8@$o$l$k$H;W$$$^$9$,!”$=$l$O(B categorize
$BFCM-$N(B
$BLdBj$G$O$J$$$N$G!"(Bmap $B$N(B Enumerator
$B$rJV$9%P!<%8%g%s$rMQ0U$9$k$3$H$G2r7h(B
$B$9$Y$-$@$H;W$$$^$9!#(B
$B<jA0L#A9$G$9$,(B enumerabler.rb: Enumerable の遅延評価版メソッドライブラリ - まめめも
$B$^$?!“(BHash $B$+$i(B Hash $B$rJV$9(B map
$B$b$”$k$HJXMx$+$b$7$l$^$;$s!#(B
$B$7$P$7$PMWK>$-$F$k$H;W$$$^$9$,!"$J$s$GMQ0U$5$l$J$$$s$G$7$?$C$1!#(B
group_by $B$H$NN`;w$K$D$$$F$O!“8D?ME*$K$O$”$^$j5$$K$J$j$^$;$s!#(B
$B$H$$$&$+!"(Bgroup_by
$B$,$I$&$K$b;H$$$K$/$9$.$k$N$,9T$1$J$$$s$@$H;W$$$^$9!#(B
$B$“$H!”(B:seed $B$OCM$G$O$J$/CM$r@8@.$9$k(B Proc
$B$r<u$1<h$k$Y$-$@$H;W$$$^$9!#(B
Hash.new([]) $B$HF1$8@_7WITNI$K$J$C$F$7$^$$$^$9!#(B
p [[1, 2], [1, 3], [2, 5]].categorize(0, 1, seed: [], op: proc {|x,
e| x << e })
{1=>[2, 3, 5], 2=>[2, 3, 5]}