Ruby 按从内容计算的最大值对数组排序

Ruby 按从内容计算的最大值对数组排序,ruby,arrays,sorting,Ruby,Arrays,Sorting,我有一个字符串数组,如下所示: [“巴西(62)”,“巴勒斯坦地区(6)”,“马其顿(2)”, “德国(6)”] 我想按最高值对它们进行排序,但这让我很为难。我尝试过各种奇怪的、美妙的(和无用的)事情,比如: cont.sort! { |it| it.scan(/\d+/).to_s.to_i} 我们应该做到这一点。您可以用一种更高效、更优雅的方式编写此文档(请参见注释),如下所示: sort_by {|e| -e[/\d+/].to_i } 请注意- 使用排序,您可以执行以下操作: sor

我有一个字符串数组,如下所示:

[“巴西(62)”,“巴勒斯坦地区(6)”,“马其顿(2)”, “德国(6)”]

我想按最高值对它们进行排序,但这让我很为难。我尝试过各种奇怪的、美妙的(和无用的)事情,比如:

cont.sort! { |it| it.scan(/\d+/).to_s.to_i}
我们应该做到这一点。您可以用一种更高效、更优雅的方式编写此文档(请参见注释),如下所示:

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

使用排序,您可以执行以下操作:

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


已在评论中提出。

谢谢您的回复。不幸的是,2号和26号被放在了一起——和1号和11号一样,尽管越来越近了!是的,在每种情况下,只需在
[0]
之后用
转换为整数即可。比
s.match(/(\d+/)[0]
更简单的方法是
s[/\d+/]
。还有一个技巧:当你想对数值进行降序排序时,使用
sort\u by{…-n}
而不是
sort\u by{…-n}。反向使用
可以加快速度(并且键入更少)。是的,绝对更好。我会更新答案。我不知道为什么,但我倾向于忘记字符串。也许这不是一个直观的方法。
sort {|a, b| b[/\d+/].to_i <=> a[/\d+/].to_i }