From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2009-07-28T23:36:37+09:00 Subject: [ruby-dev:38933] Re: Enumerator#peek けいじゅ@いしつかです. In [ruby-dev:38932] the message: "[ruby-dev:38932] Enumerator#peek", on Jul/28 18:45(JST) Tanaka Akira writes: >Enumerator#peek を新設するのはどうでしょうか。 ことさら, peekに反対するわけでもないですが... あるグループに分けて集計したいなら, 下記のような方が Ruby ぽいかも. a = %w[banana banana durian orange orange orange] a.group_by{|w| w}.each{|key, values| puts "#{key} #{values.size}"} MapReduce系では上記のような感じで書くことが多いと思います. 手前みその話ですが, fairyでは groupingした結果をinjectする処理がかなり 多いのでは? という話になっていて, inject_by(仮名)を導入しようという話に なっています. そうした場合, Ruby流に書けば: a = %w[banana banana durian orange orange orange] a.inject_by(proc{|w| w}){|key, values| puts "#{key} #{values.size}"} のような感じの記述になる予定です. また, each_consを用いて a = %w[banana banana durian orange orange orange] a.push nil #-------------------------------------------(1) e = a.to_enum n = 0 e.each_cons(2) do |word, peek1| n += 1 if word != peek1 puts "#{word} #{n}" word = nil n = 0 end end の様にも書けます. (1)が味噌なんですが... (1)しなくてもちゃんと処理して くれるeach_with_peek見たいのがあってもよいかも? __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---