【Ruby】バージョン番号のソート
2020/09/28
問題
文字列で表されたバージョンをソートすると正しくない結果になる
“2”と”10”では”2”の方が大きい値と判断される(“10”の”1”の部分を先に評価してしまうため)
['1.1.1', '1.2.10', '1.10.1', '1.2.2'].sort
=> ["1.1.1", "1.10.1", "1.2.10", "1.2.2"]
解決方法
文字列で表現されたバージョンを比較可能にするためのクラス(Gem::Version)を使えば解決する
(本来、Gemのバージョンを取り扱うために用意されたクラスだけど)
['1.1.1', '1.2.10', '1.10.1', '1.2.2'].sort_by{ |version| Gem::Version.new(version) }
=> ["1.1.1", "1.2.2", "1.2.10", "1.10.1"]