在 Ruby 中使用 >(大于符号)比较两个字符串?



我在正在从事的项目中遇到了一块代码,看起来有点可怕。它应该在两个数字之间显示/- delta,但是它使用>比较数字字符串而不是数字。

我假设该代码目前正常工作,因此我只是想了解Ruby在这种情况下如何比较这些字符串。

这是一个替换变量的示例:

if '55.59(100)' > '56.46(101)'
  delta = '+'
else
  delta = '-'
end

be 非常在比较词典数字的字符串表示时,请小心。(即第一个字符的第一个字符,第二到第二个...)

irb(main):001:0> '44' < '45'
=> true
irb(main):002:0> '44.123(whatever)' < '99.921(bananas)'
=> true

但是

irb(main):003:0> '44.123' < '100'
=> false
irb(main):004:0> '44.123' < '9.123'
=> true

只要您始终比较相等的宽度字符串,词典订购就与数值顺序相匹配。如果没有,坏事开始发生(尤其是当数字最重要的变化时)。

String包括基于基类的比较(<=>)方法定义<>>=等的Comparable模块。因此,如果字符串A在字符串B之前按字母顺序出现,则a <=> b返回-1,并且<返回true。相同的<=>方法用于分类字符串,因此您可以想象在一个排序的字符串中,每个字符串都"小于右边的邻居"。

如果您需要将字符串作为浮点数进行比较,请使用它:

if '10.1'.to_f > '9.239'.to_f
  print 'yes'
end

相关内容

  • 没有找到相关文章

最新更新