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

时间:2013-06-26 17:24:28

标签: ruby sorting

我有一个字符串版本号的数组,我想对它进行排序,但在我的生活中不能让它按照我想要的方式排序:

versions = [ "1.0.4", "1.0.6", "1.0.11", "1.1.9", "1.1.10", "1.0.16" ]

versions.sort_by {|v| [v.size]}
=> ["1.0.4", "1.0.6", "1.1.9", "1.0.11", "1.1.10", "1.0.16"]

努力实现:

=> ["1.0.4", "1.0.6", "1.0.11", "1.0.16", "1.1.9", "1.1.10"]

它似乎与词典编排有关,但我在制定我需要应用的排序规则时遇到了困难。

非常感谢任何帮助或正确方向的观点。

1 个答案:

答案 0 :(得分:13)

versions = [ "1.0.4", "1.0.6", "1.0.11", "1.1.9", "1.1.10", "1.0.16" ]
sorted = versions.sort_by {|s| s.split('.').map(&:to_i) }
sorted # => ["1.0.4", "1.0.6", "1.0.11", "1.0.16", "1.1.9", "1.1.10"]

这样做是将字符串拆分为组件并以数字方式对其进行比较。