以下の内容はhttps://shuzo-kino.hateblo.jp/entry/2015/06/30/203500より取得しました。


一定値以下の値を固定値で返したい場合、配列とArray#maxでちょっと楽しく書くことができる

その発想がなかったのでメモ。

一定値以下の値を固定値で返したい場合……
例えば、値がマイナスの時、0にしたいというようなケースでは、
配列とArray#maxでちょっと楽しく書くことができます。

Rubyだと

ary = Array.new(10) {rand(0xf)}
#=> [9, 4, 5, 6, 7, 8, 7, 6, 12, 0]

ary.map {|x| ((x -= 8) > 0) ? x : 0}
#=> [1, 0, 0, 0, 0, 0, 0, 0, 4, 0]

これが、こんな感じの実装になります。

ary = Array.new(10) {rand(0xf)}
#=> [9, 4, 5, 6, 7, 8, 7, 6, 12, 0]

tmp=->x{[0,x-8].max}
ary.map(&tmp)
#=> [1, 0, 0, 0, 0, 0, 0, 0, 4, 0]

速度的なお話

と、まぁProcの常で速度はやや残念なことになっています。

Benchmark.realtime { ary.map {|x| ((x -= 8) > 0) ? x : 0} }
#=> 7.06e-06

Benchmark.realtime { tmp=->x{[0,x-8].max}; ary.map(&tmp) }
#=> 9.337e-06



以上の内容はhttps://shuzo-kino.hateblo.jp/entry/2015/06/30/203500より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14