使用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