当然有一千种方法可以完成这项工作,但这是实现这一目标的最简单(或最优雅)方式吗?
[4,8].max
这实际上并不是太破旧,但你会做什么?
答案 0 :(得分:34)
如果你不想生成数组,那就是条件运算符:
max = a > b ? a : b
答案 1 :(得分:15)
好的,我出于好奇测试了这个:
#!/usr/bin/env ruby
# -*- mode: ruby -*-
limit = 3000000
tstart_1 = Time.now()
(0..limit).each do |i; a,b, max|
a = rand(9999999)
b = rand(9999999)
max = [a,b].max
end
puts "Array method: #{Time.now() - tstart_1} seconds"
tstart_2 = Time.now()
(0..limit).each do |i; a,b, max|
a = rand(9999999)
b = rand(9999999)
max = (a > b) ? a : b
end
puts "Ternary method: #{Time.now() - tstart_2} seconds"
输出:
数组方法:1.746134秒
三元法:1.002226秒
答案 2 :(得分:10)
这就是为任何实现Enumerable#max
的类定义Comparable
的原因。这绝对是最简单的。要真正了解正在发生的事情,您需要了解它是如何在您最喜欢的Ruby实现的核心库中实现的(并且它可能已经过优化)。