[Ruby] Array#select と Array#take_while
Array#select と Array#take_while の結果が同じになる場合、Array#take_whileを使った方が処理が速い。
$ cat ary.rb ary = (0..1000000).to_a t0 = Time.now ary.select{|i| i < 50} t1 = Time.now ary.take_while{|i| i < 50} t2 = Time.now p t1 - t0 p t2 - t1 $ ruby -v ary.rb ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux] 0.043408633 0.000618273
Array#select は
Returns a new array containing all elements of ary for which the given block returns a true value.
なので、必ず配列の全部の要素にアクセスする。
Array#take_while は
Passes elements to the block until the block returns nil or false, then stops iterating and returns an array of all prior elements.
なので、配列の要素を使ったブロックの評価がnil かfalseになった時点で 中断し、それ以降の要素にはアクセスしない。
| 固定リンク
この記事へのコメントは終了しました。
コメント