为什么数字字符串比较会产生意外结果?

'10:'  true 

有人可以解释一下为什么上面例子中的结果是真的吗? 如果我只是比较’1:’和’2:’我会得到预期的结果:

 '1:'  true 

字符串逐字符进行比较。

比较1: vs 2: ,比较从2 vs 1开始,比较在那里停止并带有预期结果。

当你比较1: vs 10: ,比较从11开始,并且由于它是平局,比较将继续进行下一次比较,即: vs 0 ,并且比较在那里停止,结果是你有发现令人惊讶(假设您希望比较字符串中的整数)。

要进行预期的比较,请使用to_i将两个操作数转换为整数。

它是ASCII中的字符比较。

'10:' < '1:'(49 < 49) || (48 < 58) || (58 < ?) (49 < 49) || (48 < 58) || (58 < ?)

 #=> true 

'1:' < '2:'(49 < 50) || (58 < 58) (49 < 50) || (58 < 58)

 #=> true 

使用从左到右的布尔检查,并检查断点,其中找到了true。

注意:这只是我对各种示例模式的观察。

两个字符串中每个字符串的第一个字符是相同的。 正如Dave在评论中所说,第一个字符’0’的第二个字符小于’:’,所以第一个字符串小于第二个字符串。

因为0的ASCII码是48,它小于:的ASCII码,即58。