Ruby でのバージョンのソート (アルファ、ベータなど)
概要
Ruby でバージョンのリストを並べ替えるにはどうすればよいですか?ナチュラルソートに関するものを見てきましたが、これはそれを超えたものです。
入力は次のような文字列の束です。
input = ['10.0.0b12', '10.0.0b3', '10.0.0a2', '9.0.10', '9.0.3']
Natural gem を使えばほぼ実現できます。
require 'naturally'
Naturally.sort(input)
=> ["9.0.3", "9.0.10", "10.0.0a2", "10.0.0b12", "10.0.0b3"]
問題: 10.0.0b3 は 10.0.0b12 の後にソートされます。 10.0.0b3 を最初にする必要があります。
誰かがうまくいく方法を持っていますか?他の言語も役に立ちます!
解決策
Ruby には、バージョンを認識する Gem クラスが付属しています。
ar = ['10.0.0b12', '10.0.0b3', '10.0.0a2', '9.0.10', '9.0.3']
p ar.sort_by { |v| Gem::Version.new(v) }
# => ["9.0.3", "9.0.10", "10.0.0a2", "10.0.0b3", "10.0.0b12"]