2012-02-01 101 views
4

我有字符串的一個這樣的數組:排序陣列從內容計算

[ 「巴西(62)」, 「PalestinianTerritoryOccupied(6)」, 「馬其頓(2)」, 「德國(6)「]

我想按最高值對它們進行排序,但它讓我難倒了。我已經試過各種怪異,精彩(無用)之類的東西:

cont.sort! { |it| it.scan(/\d+/).to_s.to_i} 

回答

6
sort_by {|e| e[/\d+/].to_i }.reverse 

應該做的伎倆。你可以這樣寫一個更有效的和優雅的方式(見註釋),如以下:

sort_by {|e| -e[/\d+/].to_i } 

注意-

使用排序,你可以這樣做:

sort {|a, b| b[/\d+/].to_i <=> a[/\d+/].to_i } 

編輯

String#[]已建議中的註釋。

+0

感謝您的回覆。不幸的是2和26彼此相鄰 - 與1和11相同。儘管靠近! – facetoe 2012-02-01 16:56:03

+0

是的,在每種情況下只需要在'[0]'之後用'.to_i'轉換爲一個整數。 – Shadwell 2012-02-01 16:59:20

+0

我明白了。我會更新答案;) – lucapette 2012-02-01 16:59:22