4

並べ替えたい文字列バージョン番号の配列がありますが、私の人生では、それらを希望どおりに並べ替えることができません。

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"]

辞書編集的に何か関係があるようですが、適用する必要がある並べ替えルールを理解するのに苦労しています。

正しい方向への助けやポイントをいただければ幸いです。

4

1 に答える 1

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"]

これが行うことは、文字列をコンポーネントに分割し、それらを数値的に比較することです。

于 2013-06-26T17:27:31.360 に答える