Techioz Blog

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