比较两个版本字符串时,to_f
不起作用:
> "1.5.8".to_f > "1.5.7".to_f
=> false
字符串比较更好,但并不总是正确的:
> "1.5.8" > "1.5.7"
=> true
> "1.5.8" > "1.5.9"
=> false
> "1.5.8" > "1.5.10" # oops!
=> true
如何正确比较版本字符串?
最佳答案
一个想法:创建一个Object#compare_by
方法,它的行为类似于compare
(也称为spaceship operatorObject#<=>),但接受一个自定义块:
class Object
def compare_by(other)
yield(self) <=> yield(other)
end
end
>> "1.5.2".compare_by("1.5.7") { |s| s.split(".").map(&:to_i) }
#=> -1
您还可以根据
compare
方法采取更具体的方法:class String
def compare_by_fields(other, fieldsep = ".")
cmp = proc { |s| s.split(fieldsep).map(&:to_i) }
cmp.call(self) <=> cmp.call(other)
end
end
>> "1.5.8".compare_by_fields("1.5.8")
#=> 0
关于ruby - 如何找到更大的版本号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12191435/