【发布时间】:2019-02-06 02:43:56
【问题描述】:
'10:' < '1:'
# => true
有人能解释一下为什么上面例子中的结果是真的吗?如果我只是比较 '1:' 和 '2:' 我会得到预期的结果:
'1:' < '2:'
# => true
【问题讨论】:
'10:' < '1:'
# => true
有人能解释一下为什么上面例子中的结果是真的吗?如果我只是比较 '1:' 和 '2:' 我会得到预期的结果:
'1:' < '2:'
# => true
【问题讨论】:
字符串逐个字符进行比较。
当您比较 1: 与 2: 时,比较会从 2 与 1 开始,然后比较会以预期的结果停止。
当您比较1: 与10: 时,比较从1 与1 开始,由于是平局,因此比较继续进行下一个比较,即: 与@987654330 @,然后比较停止,结果令人惊讶(假设您期望比较字符串中的整数)。
要进行您期望的比较,请使用to_i 将两个操作数都转换为整数。
【讨论】:
在 ASCII 中逐个字符比较。
'10:' < '1:' 是(49 < 49) || (48 < 58) || (58 < ?)
#=> true
'1:' < '2:' 是(49 < 50) || (58 < 58)
#=> true
使用从左到右的布尔检查,并在找到 true 的地方进行检查。
注意:这只是我对各种示例模式的观察。
【讨论】:
两个字符串的第一个字符相同。而且正如 Dave 在 cmets 中所说,第一个字符的第二个字符 '0' 小于 ':',所以第一个字符串小于第二个。
【讨论】:
因为0的ASCII码是48,小于:的ASCII码58。
【讨论】: