Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

一定値以下の値を固定値で返したい場合、配列と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