使用sort_by并提供一组值。它会按从左到右的顺序进行比较。默认排序是升序,所以如果你想要相反的话(例如,matches_won应该降序排列,以便大多数匹配一个首先,而不是匹配_lost,应该排序从最低到最高),你需要否定该值。
下面是一个例子
require 'pp'
Team = Struct.new :won, :lost, :demerits, :style
teams = Array.new(20) { Team.new rand(5), rand(5), rand(5), rand(5) }
puts "Before sort:"
pp teams
puts "", "After sort:"
pp teams
teams.sort_by! { |team| [-team.won, team.lost, team.demerits, -team.style] }
# >> Before sort:
# >> [#<struct Team won=1, lost=2, demerits=4, style=3>,
# >> #<struct Team won=0, lost=4, demerits=2, style=2>,
# >> #<struct Team won=4, lost=1, demerits=2, style=3>,
# >> #<struct Team won=1, lost=4, demerits=1, style=4>,
# >> #<struct Team won=3, lost=1, demerits=1, style=4>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=4, lost=0, demerits=4, style=0>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=1, lost=4, demerits=1, style=2>,
# >> #<struct Team won=3, lost=0, demerits=1, style=1>,
# >> #<struct Team won=3, lost=4, demerits=3, style=4>,
# >> #<struct Team won=1, lost=4, demerits=0, style=0>,
# >> #<struct Team won=3, lost=4, demerits=2, style=0>,
# >> #<struct Team won=3, lost=0, demerits=3, style=0>,
# >> #<struct Team won=1, lost=2, demerits=0, style=1>,
# >> #<struct Team won=3, lost=0, demerits=1, style=0>,
# >> #<struct Team won=0, lost=4, demerits=1, style=4>,
# >> #<struct Team won=1, lost=4, demerits=3, style=0>,
# >> #<struct Team won=3, lost=3, demerits=2, style=3>,
# >> #<struct Team won=0, lost=4, demerits=4, style=4>]
# >>
# >> After sort:
# >> [#<struct Team won=4, lost=0, demerits=4, style=0>,
# >> #<struct Team won=4, lost=1, demerits=2, style=3>,
# >> #<struct Team won=3, lost=0, demerits=1, style=1>,
# >> #<struct Team won=3, lost=0, demerits=1, style=0>,
# >> #<struct Team won=3, lost=0, demerits=3, style=0>,
# >> #<struct Team won=3, lost=1, demerits=1, style=4>,
# >> #<struct Team won=3, lost=3, demerits=2, style=3>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=3, lost=4, demerits=2, style=0>,
# >> #<struct Team won=3, lost=4, demerits=3, style=4>,
# >> #<struct Team won=1, lost=2, demerits=0, style=1>,
# >> #<struct Team won=1, lost=2, demerits=4, style=3>,
# >> #<struct Team won=1, lost=4, demerits=0, style=0>,
# >> #<struct Team won=1, lost=4, demerits=1, style=4>,
# >> #<struct Team won=1, lost=4, demerits=1, style=2>,
# >> #<struct Team won=1, lost=4, demerits=3, style=0>,
# >> #<struct Team won=0, lost=4, demerits=1, style=4>,
# >> #<struct Team won=0, lost=4, demerits=2, style=2>,
# >> #<struct Team won=0, lost=4, demerits=4, style=4>]
这对我比较标准,但不是4 3的伟大工程。如果有两支球队的match_won相同,我需要以某种方式检查并看看他们是否玩过彼此,如果是的话,谁赢得了最高点的胜利者。 我确定这个问题对我来说很特殊,很难回答。我会继续Google搜索。谢谢你的帮助。 – 2012-01-10 02:48:27
使用sort而不是sort_by。然后它会给你们两个进行比较的球队,你可以通过任何你想要的比较。查看文档以了解如何执行此操作的示例。 http://rubydoc.info/stdlib/core/1.9.3/Enumerable#sort-instance_method – 2012-01-10 03:44:09