2011-08-11 10 views
1

各リリースのリリースに基づいてソフトウェアリリースの注文リストを取得したいのですが、それはリリースフォルダにあります。すなわち/releases/7.1/releases/7.2などruby​​ array/hash/setにバージョン番号のリストを格納するために使うものは?

# Regexp out the number from the filename 
def get_version(filename) 
    [0,0] # obviously returns different numbers based on regx 
    # {:major => 0, :minor => 0} # or was thinking about a Hash? 
end 

versions = [] 
#versions = Array.new() # Is this better? 

Dir.new(basedir).entries.each do |filename| 
    versions << get_version(filename) if not File.directory? filename 
end 

versions.each {|major, minor| puts "#{major}.#{minor}" } 

は私に私のリスト

7.5 
7.8 
7.9 
4.10 
7.3 
7.11 
7.2 
7.4 
7.6 
7.1 
7.10 

を与えます。しかし、今、私はこのような何か見て、それらを注文したい: - Symbol秒程度

4.10 
7.1 
7.2 
7.3 
7.4 
7.5 
7.6 
7.8 
7.9 
7.10 # I appreciate that these might appear below 7.1, I dont mind too much about that 
7.11 

そして、何を?!

多くのありがとうございます。

+0

申し訳ありませんが、おそらく私は質問のポイントを紛失しています。しかし、なぜsortメソッドを使用していないのですか? –

答えて

1

別の配列印刷前にソートしますか?

versions_array = Dir.new(basedir).entries.map do |filename| 
    get_version(filename) unless File.directory? filename 
end 
versions_array.compact! 
versions = versions_array.map {|major, minor| "#{major}.#{minor}" } 
puts version.sort { |a, b| a.to_f <=> b.to_f } 
+0

いいね、私はそれをスピンします... –

2

versionomy gemを使用することをおすすめします。または、宝石を使用したくない場合は、独自のクラスを作成して比較モジュールでミックスし、バージョン比較を実装してください(これについてはSOに関する多くの質問があります)

+0

病気は宝石と一緒に行く、それは良いようです。 –

関連する問題