2012-02-01 60 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