日刊 あおのうま 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

コメントを残す

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.