如何使用“2.1.2.5”等数字对字符串数组进行排序?

时间:2013-01-15 23:57:40

标签: ruby string integer

我有一个字符串数组:

arr = ["2.1", "2.2", "2.2.1", "2.2.10", "2.2.2", "2.10"]

如果我使用arr.sort,结果是:

["2.1", "2.10", "2.2", "2.2.1", "2.2.10", "2.2.2"]

我需要:

["2.1", "2.2", "2.2.1", "2.2.2", "2.2.10", "2.10"]

如何正确排序?

问题2:

如何对“alpha”或“beta”类型字符进行排序,例如“2.1a”或“0.9b”

问题3:

如果我有一个字段类型为字符串的活动记录数组,其中包含类似的数字,那么使用default_scope :order => ...

在模型sort_by{|a| a.split('.').map &:to_i }中进行设置是否真实?

在模型中创建我的方法,如

def my_sort
  #sorting
end

为此:

Block.all.my_sort

1 个答案:

答案 0 :(得分:3)

arr.sort_by{|a| a.split('.').map &:to_i }

将会:

  1. split将每个字符串转换为组件。
  2. 将每个更改为整数(map &:to_i)。
  3. 相互比较这些数组。