对一串 ID 值进行数字排序

Sorting a string of ID values numerically

我有以下字符串数组:

x = ["1.2", "1.1", "1.18", "1.18.3", "1.4", "1.18.20", "2.5"]

Ruby 的数组排序方法按字母顺序对字符串进行排序,结果如下:

[
[0] "1.1",
[1] "1.18",
[2] "1.18.20",
[3] "1.18.3",
[4] "1.2",
[5] "1.4",
[6] "2.5",
]

我想根据每个小数点内的数值对这个数组进行排序,使其returns按以下顺序排列:

[
[0] "1.1",
[1] "1.2",
[2] "1.4",
[3] "1.18",
[4] "1.18.3",
[5] "1.18.20",
[6] "2.5"
]

我也不能保证每个 "ID" 内的小数点数。 任何帮助将不胜感激。谢谢!

您可以使用 ruby​​gems 版本比较:

x = ["1.2", "1.1", "1.18", "1.18.3", "1.4", "1.18.20", "2.5"]
x.sort_by { |i| Gem::Version.new(i) }
# => ["1.1", "1.2", "1.4", "1.18", "1.18.3", "1.18.20", "2.5"] 

你可以这样使用:

x.sort_by { |n|
  numbers = n.split(/\./)
  numbers.map { |a| a.to_f }
}
# => ["1.1", "1.2", "1.4", "1.18", "1.18.3", "1.18.20", "2.5"]
x.sort_by { |s| s.split('.').map(&:to_i) }
  #=> ["1.1", "1.2", "1.4", "1.18", "1.18.3", "1.18.20", "2.5"]

排序如下:

[[1,1], [1,2], [1,4], [1,18,3], [1,18,20], [2,5]].sort
  #=> [[1, 1], [1, 2], [1, 4], [1, 18, 3], [1, 18, 20], [2, 5]]

有关排序结果的说明,请参阅 Array#<=>