その発想がなかったのでメモ。
一定値以下の値を固定値で返したい場合……
例えば、値がマイナスの時、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