2013-01-15 41 views
-3

我有一個字符串數組:如何排序數字如「2.1.2.5」的字符串數組?

如果我使用arr.sort,結果是:

["2.1", "2.10", "2.2", "2.2.1", "2.2.10", "2.2.2"] 

我需要:

["2.1", "2.2", "2.2.1", "2.2.2", "2.2.10", "2.10"] 

我該如何正確排序呢?

問題2:

我如何排序 「阿爾法」 和 「貝塔」 型的人物,如 「2.1A」 或 「0.9b」

問題3:

如果我有一個字段類型爲字符串的活動記錄陣列,其中包含像這樣的數字,是否真的要在default_scope :order => ...中設置爲sort_by{|a| a.split('.').map &:to_i }

或者

創建我的模型方法的東西像

def my_sort 
    #sorting 
end 

對於這一點:

Block.all.my_sort 
+2

看起來像你需要比較版本號碼,像這樣http://stackoverflow.com/questions/2051229/how-to-compare-versions-in-ruby – SirDarius

+1

是否有機會,任何「阿爾法」或將會遇到「beta」類型的字符('2.1a'或'0.9b')? –

+0

是的,有機會。謝謝,我忘了,我可以面對這個問題.. – Benjamin

回答

3
arr.sort_by{|a| a.split('.').map &:to_i } 

哪樣:

  1. split每個字符串分成組件。
  2. 將它們中的每一個改爲整數(map &:to_i)。
  3. 彼此比較這些陣列。
+0

它的工作原理!謝謝! – Benjamin

+0

如果我有一個字段類型的字段類型的活動記錄數組包含這樣的數字,是否真的要用'sort_by {| a |}來執行'default_scope:order => ...' a.split('。')。map&:to_i}'? – Benjamin