我試圖通過長度和字母數字排序在紅寶石的數組:排序紅寶石數組作爲字母數字
的期望的順序將是:
- site.com?page=7
- 站點.COM?頁= 8
- site.com?page=9
- site.com?page=880
我一直在嘗試array.sort並進行排序!但他們似乎都沒有做到這一點,因爲他們會在8點之後放置880.
我該如何去做這個最有效的方法?
我試圖通過長度和字母數字排序在紅寶石的數組:排序紅寶石數組作爲字母數字
的期望的順序將是:
我一直在嘗試array.sort並進行排序!但他們似乎都沒有做到這一點,因爲他們會在8點之後放置880.
我該如何去做這個最有效的方法?
比方說你有一個數組:
a = ["site.com?page=7", "site.com?page=8", "site.com?page=9", "site.com?page=880"]
然後,你可以這樣做:
a = a.sort_by{|t| t.split(/page=/)[1].to_i}
總之我使用自定義排序標準,這個標準是由「網頁分割字符串= 「,然後使用page=
的第一個匹配後的字符串的數值(to_i
)進行排序。
可以通過長度使用group_by
功能組項目和sort_by
它們字母數字組內訂購,最後壓平基團:使用固定
list.group_by {|i| i.length}.sort_by{|i| i.first}.collect {|i| i.last.sort}.flatten
的一般技巧是零墊數排序數組字符串之前的小數位數。
這可以通過下面的代碼很容易地完成:
a = ["site.com?page=9","site.com?page=880""site.com?page=8","site.com?page=7"]
N = 5 # Maximum number of decimal places allowed
a.sort_by { |s| s.gsub(/(\d+)/) { |n| sprintf("%0#{N}d", n.to_i) } }
這非常適用,除非字符串包含任意數量大於或等於10^N。
謝謝。雖然恐怕我應該發佈整個URI,因爲頁面只是其中的一個。還有可能做些什麼嗎? – charliexx 2013-02-21 20:21:30