对一串 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" 内的小数点数。
任何帮助将不胜感激。谢谢!
您可以使用 rubygems 版本比较:
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#<=>。
我有以下字符串数组:
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" 内的小数点数。 任何帮助将不胜感激。谢谢!
您可以使用 rubygems 版本比较:
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#<=>。