如何在红宝石中添加清洁剂?

时间:2011-11-23 23:41:15

标签: ruby arrays

我有以下代码,我只想让它看起来更干净,有什么建议吗?基本上,一个团队有很多游戏,我想合并所有的游戏,并通过他们的属性game.game_date来订购它们。

    @games = Array.new
    @teams.each {|team|
      team_games = team.games
      @games << team_games
    }

    @games = @games.flatten

2 个答案:

答案 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 }

注意第二个:collectmap是同义词,injectreduce也是同义词。

答案 1 :(得分:1)

这个怎么样?

@games = @teams.map(&:games).flatten