我有下面的代碼,我只是想讓它看起來更清潔,有什麼建議嗎?基本上,一個團隊有很多遊戲,我想合併所有的遊戲,並按他們的屬性game.game_date排序?我怎樣才能讓清潔劑在紅寶石中追加?
@games = Array.new
@teams.each {|team|
team_games = team.games
@games << team_games
}
@games = @games.flatten
我有下面的代碼,我只是想讓它看起來更清潔,有什麼建議嗎?基本上,一個團隊有很多遊戲,我想合併所有的遊戲,並按他們的屬性game.game_date排序?我怎樣才能讓清潔劑在紅寶石中追加?
@games = Array.new
@teams.each {|team|
team_games = team.games
@games << team_games
}
@games = @games.flatten
如何:
...也許:
@teams.reduce([]) { |memo, team| memo + team.games }.sort_by(&:game_date)
...這可以在最近的Ruby版本(不知道什麼時候該來寫入如下in):
@teams.reduce([], :+).sort_by(&:game_date)
注意:符號#to_proc(位看起來像&:symbol
)需要最新版本的Ruby(不太確定所需版本)。 該構造與將類似{ |arg| arg.symbol }
的塊傳遞給方法相同。 例如:map(&:games)
相當於map { |team| team.games }
NB第二:collect
和map
是同義詞,因爲是inject
和reduce
。
您可以使用flat_map使其更加優雅:http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-flat_map –
這個怎麼樣?
@games = @teams.map(&:games).flatten
我不知道這是一個好主意 - 如果你要刪除一個遊戲,你必須在'@ teams'一個'team'刪除它,然後從'刪除@遊戲「。我會擔心這將是一個幹(不要重複自己)侵犯。 –
@AndrewGrimm,你會推薦什麼? – Kamilski81