我有下面的代码,我只是想让它看起来更清洁,有什么建议吗?基本上,一个团队有很多游戏,我想合并所有的游戏,并按他们的属性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