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

use*_*123 4 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"]
Run Code Online (Sandbox Code Playgroud)

试图实现:

=> ["1.0.4", "1.0.6", "1.0.11", "1.0.16", "1.1.9", "1.1.10"]
Run Code Online (Sandbox Code Playgroud)

它似乎与词典编排有关,但我很难制定出我需要应用的排序规则.

任何帮助或正确方向的一点将不胜感激.

Ser*_*sev 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"]
Run Code Online (Sandbox Code Playgroud)

它的作用是将字符串拆分为组件并以数字方式对其进行比较.