迭代2个数组并从匹配中构建新数组

问题描述 投票:0回答:2

好的,我有一系列'胜利者'这个数组代表在上一轮比赛中获胜的用户。然后我有一个名为'锦标赛参与'的对象数组,这代表参加锦标赛的所有用户(多对多关系连接表)。

对于每个“赢家ID”,我想迭代“锦标赛参与”数组,并使用与“赢家ID”匹配的user_id查找锦标赛参与,然后将其推送到名为“圆形参与”的新数组中......

我已经尝试了下面的代码,但我总是返回原来的'winner_ids'数组....

@challenges = Challenge.where(tournament_id: @tournament.id)
@winner_ids = @challenges.pluck(:winner_id)
@tournament_participations = @tournament.tournament_participations
@round_participations = []
@round_participations = @winner_ids.each do |winner_id|
   @round_participation = @tournament_participations.where(user_id: winner_id)
   @round_participations << @round_participation
end
ruby-on-rails ruby
2个回答
4
投票

each返回它被调用的可枚举数;在这种情况下,@winner_ids.each正在返回@winner.ids。您不需要将迭代结果分配给@round_participations

另外,请查看the map method


1
投票

使用map方法,而不是.each。

map方法可用于基于原始数组创建新数组,但使用提供的块修改的值。请参阅以下示例。

在每种方法的情况下

irb(main):001:0> arr = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):002:0> arr.each { |a| print a -= 10, " " }
-9 -8 -7 -6 -5 
=> [1, 2, 3, 4, 5]

你可以在迭代后看到它返回原始数组。但在地图的情况下

irb(main):005:0> arr = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):006:0> arr.map { |a| 2*a }
=> [2, 4, 6, 8, 10]

map可以转换数组的内容,这意味着它可以对数组中的每个元素执行操作。

© www.soinside.com 2019 - 2024. All rights reserved.