如何在ruby中创建更干净的附加?

如何在ruby中创建更干净的附加?,ruby,arrays,Ruby,Arrays,我有以下代码,我只是想让它看起来更干净,有什么建议吗?基本上,一个团队有很多游戏,我想合并所有的游戏,并按游戏属性排序。游戏日期 @games = Array.new @teams.each {|team| team_games = team.games @games << team_games } @games = @games.flatten 那么: @teams.map(&:games).flatten.sor

我有以下代码,我只是想让它看起来更干净,有什么建议吗?基本上,一个团队有很多游戏,我想合并所有的游戏,并按游戏属性排序。游戏日期

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

    @games = @games.flatten
那么:

@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)
注意:Symbolto_proc看起来像&:symbol的位需要最新版本的Ruby,但不太确定所需的版本。 此构造与将类似{| arg | arg.symbol}的块传递给方法相同。 例如:map&:games相当于map{| team | team.games}

注意第二点:collect和map是同义词,inject和reduce也是同义词。

@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)
注意:Symbolto_proc看起来像&:symbol的位需要最新版本的Ruby,但不太确定所需的版本。 此构造与将类似{| arg | arg.symbol}的块传递给方法相同。 例如:map&:games相当于map{| team | team.games}

注意第二点:collect和map是同义词,inject和reduce也是同义词。

这个怎么样

@games = @teams.map(&:games).flatten
这个怎么样

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

你可以通过使用平面地图使它稍微优雅一点:你可以通过使用平面地图使它稍微优雅一点:我不确定这是一个好主意-如果你要删除一个游戏,你必须将它从@teams中的一个团队中删除,然后再从@games中删除它。我担心这会是一个干巴巴的,不要重复你自己的违规行为。@Andrewgrim,你有什么建议吗?我不确定这是一个好主意-如果你要删除一个游戏,你必须将它从@teams中的一个团队中删除,然后再从@games中删除它。“我担心这会是一个干巴巴的,不要重复你自己的违规行为。”安德烈·格里姆,你有什么建议吗?