"1", "test"=>"2", "retest"=>"42"}, {"product_id"=>"1", "te-6ren">
gpt4 book ai didi

ruby - 检索数组中散列的一些元素

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:16 24 4
gpt4 key购买 nike

我有一个哈希数组myhash:

myhash
=> [{"product_id"=>"1", "test"=>"2", "retest"=>"42"}, {"product_id"=>"1", "test"=>"2", "retest"=>"42"}]

我想将散列映射到它们的 product_id 值。我这样做了:

myhash.map{|item| item['product_id']}
# => ["1", "1"]

它给出了我想要的。

有没有办法使用 map proc 让它变得更好?我尝试了 myhash.map(&:fetch('product_id')),但无济于事。

编辑:换句话说,我恢复了这种情况,感谢@7stud 试图回答:

a.map(&:"fetch('product_id')")
=> NoMethodError: undefined method `fetch('product_id')' for {"product_id"=>"1", "test"=>"2", "retest"=>"42"}:Hash
from (irb):5:in `map'
from (irb):5
from /home/shideneyu/.rbenv/versions/1.9.3-p194/bin/irb:12:in `<main>'

或者,当我这样做时:

{"product_id"=>"1", "test"=>"2", "retest"=>"42"}.fetch('product_id')
=> "1"

它检索好的值。那么问题是我无法在使用 map 时将参数传递给 fetch 方法。怎么做?

最佳答案

I like to use map(&:) when I can, @Arup Rakshit, I just wondered why that fetch didn't work. I still have no answer on it between.

当你写的时候:

:fetch('product_id')

您是在通知 ruby​​,冒号后的所有内容都是您的符号名称。好吧,符号名称有一定的规则,这是:

fetch('product_id')

违反了符号的语法。为什么?因为它看起来像一个方法调用,因此它不是一个有效的符号名称。如果您绝对必须拥有该符号名称,则可以使用引号创建它:

:"fetch('product_id')"

...但这当然不是您想要做的。

接下来, & 做什么?它做了两件事:

  1. & 在符号上调用 Symbol#to_proc,它返回一个过程,如下所示:

    {|x| x.send(the_symbol) } #x 是数组的一个元素

  2. & 将 proc 变成一个 block ,提供给被调用的方法,例如 map ()在你的例子。

关于ruby - 检索数组中散列的一些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24344923/

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