Enumerable使いこなしたい
Rubyリファレンスによると、Enumerableは「繰り返しを行なうクラスのための Mix-in。」とある。Arrayクラスなんかが代表的だが、Enumerableのメソッドはたくさんあって覚えるのがたいへんそう。実際、まだいくつか良く分からないものがある。
よく使うのは、このくらい。
a = %w[bright cool dusty active] # each_with_index a.sort.each_with_index do |item, index| print "[#", index, " : ", item, "]" end #=> [#0 : active][#1 : bright][#2 : cool][#3 : dusty] # grep p a.sort.grep(/i/) #=> ["active", "bright"] # inject i = a.inject(0) do |total, item| total += item.length end p i #=> 21 # map m = a.map do |item| item.reverse end p m #=> ["thgirb", "looc", "ytsud", "evitca"]
ほかにもzipとか得体の知れないのがある。
で、例によってPerl版。grepやmapはPerl由来なんでしょうか。
# not strict
@a = qw| bright cool dusty active |;
# (inspect)
sub dump_array { printf "[%s]", join ",", map { "\"$_\"" } @_ }
# (each_with_index)
for (0..$#a) {
printf"[#%d : %s]", $_, $a[$_];
}
# grep
dump_array grep { /i/ } @a;
# (inject)
$total = 0;
for (@a) {
$total += length;
}
print $total;
# map
dump_array map { join "", reverse split // } @a;