如何比较 Ruby 中的月-年组合?
How do I compare month-year combinations in Ruby?
我正在使用 Rails 4.2.7。我有两对数字……
month1 # A number between 1 and 12
year1 # a four digit year
month2 # A number between 1 and 12
year2 # A four digit year
如何编写比较表达式来判断“month2-year2”组合是否大于等于“month1-year1”组合?例如,如果 month2 = 1 且 year2 = 2017 且 month1 = 12 且 year1 = 2016,则 month2-year2 组合大于 month1-year1 组合。
month1, month2, year1, year2 = 12, 1, 2016, 2017
=> [12, 1, 2016, 2017]
Time.new(year1, month1) >= Time.new(year2, month2)
=> false
Time.new(year2, month2) >= Time.new(year1, month1)
=> true
参考:https://ruby-doc.org/core-2.2.0/Time.html#class-Time-label-Creating+a+new+Time+instance
非常简单,无需创建日期或时间对象。
def first_smaller?(ym1, ym2)
(ym1 <=> ym2) == -1
end
first_smaller? [2016,12], [2017,1]
#=> true
first_smaller? [2017,1], [2016,12]
#=> false
first_smaller? [2017,1], [2017,1]
#=> false
请参阅 Array#<=> 文档的第三段,了解 Ruby 如何排序数组。
如果你还想知道两个数组是否相等,你可以这样写:
def ordering(ym1, ym2)
case ym1 <=> ym2
end
returns -1
如果 ym1
更小,+1
如果 ym2
更小,或者 0
如果数组相等。
我正在使用 Rails 4.2.7。我有两对数字……
month1 # A number between 1 and 12
year1 # a four digit year
month2 # A number between 1 and 12
year2 # A four digit year
如何编写比较表达式来判断“month2-year2”组合是否大于等于“month1-year1”组合?例如,如果 month2 = 1 且 year2 = 2017 且 month1 = 12 且 year1 = 2016,则 month2-year2 组合大于 month1-year1 组合。
month1, month2, year1, year2 = 12, 1, 2016, 2017
=> [12, 1, 2016, 2017]
Time.new(year1, month1) >= Time.new(year2, month2)
=> false
Time.new(year2, month2) >= Time.new(year1, month1)
=> true
参考:https://ruby-doc.org/core-2.2.0/Time.html#class-Time-label-Creating+a+new+Time+instance
非常简单,无需创建日期或时间对象。
def first_smaller?(ym1, ym2)
(ym1 <=> ym2) == -1
end
first_smaller? [2016,12], [2017,1]
#=> true
first_smaller? [2017,1], [2016,12]
#=> false
first_smaller? [2017,1], [2017,1]
#=> false
请参阅 Array#<=> 文档的第三段,了解 Ruby 如何排序数组。
如果你还想知道两个数组是否相等,你可以这样写:
def ordering(ym1, ym2)
case ym1 <=> ym2
end
returns -1
如果 ym1
更小,+1
如果 ym2
更小,或者 0
如果数组相等。