在ruby中对数字字符串进行排序

时间:2014-04-21 20:14:05

标签: ruby-on-rails ruby

我有两个不同长度的数字:

"103""11"

在irb:

2.1.1 :005 > "11" > "103"
=> true 
2.1.1 :006 > "11" < "103"
=> false 

为什么会这样?我知道我可以为每个字符串.to_i,但如果这是一个rails类型为字符串的rails查询,我可以做些什么呢?

3 个答案:

答案 0 :(得分:6)

字符串按lexicographically排序,这意味着&#34; 1&#34;来自&#34; 0&#34;和&#34; 103&#34;来自&#34; 11&#34;,之前&#34; 1122344&#34;,之前&#34; 1abc&#34;。

你无法将字符串比作数字,你需要先将它们解析为数字。

我能想到的唯一方法是确保在将它们变成字符串之前填充足够的零:"000103", "000011" ...

答案 1 :(得分:2)

正在逐字逐句地比较字符串。因此'11' > '103'执行会在第二个字符上停止并返回true,因为'1'.chr > '0'.chr

答案 2 :(得分:1)

他们是字符串。它们按String#ord值进行比较。 所以'1'.ord # => 49'0'.ord # => 48。这就是为什么

'11' > '10' # => true
# and
'11' > '100' # => true

以及

'b' > 'a' # => true
'a'.ord # => 97
'b'.ord # => 98
# and
'b' > 'aaaaa' # => still true
相关问题