【问题标题】:Simplifying an expression using .map使用 .map 简化表达式
【发布时间】:2014-10-01 23:19:55
【问题描述】:

下面我有一个使用一堆 each 迭代器的活动记录查询示例

user.user_spells.each do |us|
  us.spell.buff_effects.where(stat_effected:'gold').each do |be|
    value = value + be.value
  end
end

我想使用 .map 来返回所有结果的列表,这样我基本上可以在一行中完成。

我想出了:

user.user_spells.map { |us| us.spell.buff_effects.where(stat_effected:stat_effected) }.each do |be|
  value = value + be.value
end

但是....map 块返回一些空数组。不知道怎么写正确。

任何帮助将不胜感激!谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    可能沿着这些思路,如果你想要的是最后的值的总和:

    value =
      user.user_spells.flat_map do |us|
        us.spell.buff_effects.where(stat_effected:'gold').map(&:value)
      end.reduce(&:+)
    

    【讨论】:

    • 这是完美的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多