日刊 あおのうま Vol.2276(2017.06.24)【無限長リスト条件停止畳み込み】

投稿者: | 2017/06/24

inject と reduce

昨日の日刊で書いたプログラミング問題のコレクション使用1ライナー版。

def each_rand_seven
  (0..Float::INFINITY).lazy.map{ rand(0..9) }.inject([]){ |list, x| x == 7 ? (break [list, x].flatten) : [list, x].flatten }
end

ポイントはlazy による無限長リストの遅延評価と、break によるinject の終了指定。
ハマったのが「三項演算子でbreak を呼ぶ場合には、パーレン(括弧)で括ってやる必要がある」と知らなかったこと。

あと、inject(注ぐ)のエイリアスがreduce(削る)ってのは面白かったですね。
まあ、処理部の内容に応じて好きな方で呼べって事と理解しました。

それにしても、コレクション便利だなあ。
もっとちゃんと扱える様になろう。

なお、昨日書いた再帰版はこちら。

Screenshot of kawairi.jp

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください