我有以下代码,我只想让它看起来更干净,有什么建议吗?基本上,一个团队有很多游戏,我想合并所有的游戏,并通过他们的属性game.game_date来订购它们。
@games = Array.new
@teams.each {|team|
team_games = team.games
@games << team_games
}
@games = @games.flatten
答案 0 :(得分:4)
怎么样:
@teams.map(&:games).flatten.sort_by(&:game_date)
......或者可能:
@teams.reduce([]) { |memo, team| memo + team.games }.sort_by(&:game_date)
...这可以在最近的Ruby版本上编写如下(不确定它何时进入):
@teams.reduce([], :+).sort_by(&:game_date)
注意:符号#to_proc(看起来像&:symbol
的位)需要最新版本的Ruby(不太确定所需的版本)。
此构造与将{ |arg| arg.symbol }
之类的块传递给方法相同。
例如:map(&:games)
相当于map { |team| team.games }
注意第二个:collect
和map
是同义词,inject
和reduce
也是同义词。
答案 1 :(得分:1)
这个怎么样?
@games = @teams.map(&:games).flatten