"object name" } 使用: @hash = {-6ren">
gpt4 book ai didi

ruby-on-rails - 如何在 Ruby 中用 map 重构每个函数?

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:20 25 4
gpt4 key购买 nike

我有一个循环构建用于选择字段的散列。目的是以散列结尾:

{ object.id => "object name", object.id => "object name" }

使用:

@hash = {}
loop_over.each do |ac|
@hash[ac.name] = ac.id
end

我认为 map 方法适用于这种情况,但只需要一些帮助来理解它及其工作原理。 map 是重构此 each 循环的正确方法吗?

最佳答案

这样的数据转换更适合 each_with_object :

@hash = loop_over.each_with_object({}) { |ac, h| h[ac.name] = ac.id }

如果您的大脑告诉您使用 map 但您不想要数组作为结果,那么您通常想要使用 each_with_object。如果你想将 block 的返回值反馈给它自己,那么你需要 inject但在这种情况下,inject 需要在 block 中使用一个看起来很有趣且人为的 ;h:

@hash = loop_over.inject({}) { |h, ac| h[ac.name] = ac.id; h }
# -------------------- yuck -----------------------------^^^

人工返回值的存在是您想要使用 each_with_object 的信号。

关于ruby-on-rails - 如何在 Ruby 中用 map 重构每个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com