« [プログラミング] ** 演算子 in Scala | トップページ | [日記] LibreOffice の Calc »

2015年4月 2日 (木)

[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になった時点で 中断し、それ以降の要素にはアクセスしない。

|

« [プログラミング] ** 演算子 in Scala | トップページ | [日記] LibreOffice の Calc »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] Array#select と Array#take_while:

« [プログラミング] ** 演算子 in Scala | トップページ | [日記] LibreOffice の Calc »