'10:' < '1:'
# => true
有人可以解释我为什么上面的例子中的结果是正确的吗?如果我只是比较“1:”和“2:”我得到预期的结果:为什么数字字符串比较会产生意想不到的结果?
'1:' < '2:'
# => true
'10:' < '1:'
# => true
有人可以解释我为什么上面的例子中的结果是正确的吗?如果我只是比较“1:”和“2:”我得到预期的结果:为什么数字字符串比较会产生意想不到的结果?
'1:' < '2:'
# => true
字符串进行比较逐字符较小。
当你比较1:
VS 2:
,比较始于2
VS 1
,比较与预期的结果停在那里。
当你比较1:
VS 10:
,比较始于1
VS 1
,并且由于它是一个平局,比较移动到下一个比较,这是:
VS 0
,和比较,结果停那里,你会发现令人惊讶的(因为你期望字符串中的整数将被比较)。
为了进行预期的比较,请使用to_i
将两个操作数都转换为整数。
每个两个字符串的第一个字符是相同的。正如戴夫在评论中所说,第一个字符'0'的第二个字符小于':',所以第一个字符串小于第二个字符。
因为对于0
ASCII码是48,这比:
的ASCII码,它是58
它是在ASCII中逐字符比较。
'10:' < '1:'
是(49 < 49) || (48 < 58) || (58 < ?)
#=> true
'1:' < '2:'
是(49 < 50) || (58 < 58)
#=> true
从左至右依次为布尔检查使用,并检查其中true发现断裂。
注意:这只是我对各种示例模式的观察。
因为'0' <':'等 –
http://en.wikipedia.org/wiki/Lexicographical_order – roippi