モバイルアプリで利用するWeb APIで、アプリのバージョンに応じて処理を分岐したい場合があるが、
私の場合モバイルアプリでSemantic Versioning 2.0.0を採用することが多いため、
semverで規定される1.0.0のような形式のバージョン表記は通常文字列で扱うため、そのままでは数値として大小の比較をすることができない。
そこで、これを数値に変換し、数値としての大きさで比較できるようにする。
Rubyで書くとこんな感じだろうか。
'1.2.3'.split('.').map.with_index {|n, i| n.to_i * (1000 ** (2 - i)) }.inject(:+) # => 1002003
'1.2.3'.gsub(/\.(\d+)/){ "%03d" % $1 }.to_i #=> 1002003
このコードの場合MAJOR, MINOR, PATCHそれぞれが3桁以内で正しく動作するが、1000の部分を書き換えればもっと大きな桁にも対応できる。