【问题标题】:How can I sort an array of strings with numbers like "2.1.2.5"? [closed]如何对带有“2.1.2.5”之类的数字的字符串数组进行排序? [关闭]
【发布时间】:2013-01-15 23:57:40
【问题描述】:

我有一个字符串数组:

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:

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

问题 3:

如果我有一个字段类型为字符串的活动记录数组,其中包含这样的数字,那么在模型中设置default_scope :order => ...sort_by{|a| a.split('.').map &:to_i } 是真的吗

或者

在类似的模型中创建我的方法

def my_sort
  #sorting
end

为此:

Block.all.my_sort

【问题讨论】:

  • 看起来你需要比较版本号,像这样stackoverflow.com/questions/2051229/…
  • 是否有可能遇到任何“alpha”或“beta”类型的字符('2.1a' 或 '0.9b')?
  • 是的,有机会。谢谢,我忘记了,我可以面对这个问题..

标签: ruby string integer


【解决方案1】:
arr.sort_by{|a| a.split('.').map &:to_i }

哪个会:

  1. split将每个字符串转换成组件。
  2. 将它们中的每一个都更改为整数 (map &:to_i)。
  3. 比较这些数组。

【讨论】:

  • 如果我有一个字段类型为字符串的活动记录数组包含这样的数字,那么default_scope :order => ...sort_by{|a| a.split('.').map &:to_i } 是真的吗?
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2020-05-25
  • 2021-11-28
  • 2020-05-29
  • 2021-09-08
  • 2011-09-04
相关资源
最近更新 更多