Ruby 检索数组中哈希的某些元素
我有一个哈希数组Ruby 检索数组中哈希的某些元素,ruby,sorting,hash,proc,Ruby,Sorting,Hash,Proc,我有一个哈希数组myhash: myhash => [{"product_id"=>"1", "test"=>"2", "retest"=>"42"}, {"product_id"=>"1", "test"=>"2", "retest"=>"42"}] 我想将散列映射到product\u id的值。我这样做: myhash.map{|item| item['product_id']} # => ["1", "1"] 这就是我想要的 是否有任何方
myhash
:
myhash
=> [{"product_id"=>"1", "test"=>"2", "retest"=>"42"}, {"product_id"=>"1", "test"=>"2", "retest"=>"42"}]
我想将散列映射到product\u id
的值。我这样做:
myhash.map{|item| item['product_id']}
# => ["1", "1"]
这就是我想要的
是否有任何方法可以使用map proc使它变得更好?我尝试了myhash.map(&:fetch('product\u 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>'
它检索好的值。问题是,在使用映射时,我不能将参数传递给fetch
方法。如何做到这一点
我喜欢在可能的时候使用map(&:),我只是想知道为什么
那次抓取不起作用。我仍然没有答案
当你写作时:
:fetch('product_id')
您正在通知ruby冒号后面的所有内容都是符号的名称。符号名有一些规则,这是:
fetch('product_id')
违反符号的语法。为什么?因为它看起来像一个方法调用,因此它不是一个有效的符号名。如果必须使用该符号名,可以使用引号创建:
:"fetch('product_id')"
…但这当然不是你想要做的
接下来,我们做什么?它做两件事:
{| x | x.send(u符号)}其中x是数组的元素
没有内置的。。创建您自己的进程对象。。。看看如何构建……无论如何,谢谢你,所以我想我写的第一个可行的解决方案是最简单、最干净的?当然你的解决方案也是最快、最干净的……无意冒犯,我喜欢在可能的时候使用map(&:)@Arup Rakshit,我只是想知道为什么这个获取不起作用。我仍然没有答案。@sawa,对不起,这是我的irb测试的剩余部分,我编辑了我的问题。感谢您的善意解释,在本例中,
x
是数组的元素,因此它是散列fetch
是一个散列方法()我错过了什么吗?@sidney,你告诉ruby有一个名为fetch('product\u id')
的方法。该方法名包含19个字符。请发布一个链接,显示哈希的方法名称,该名称以“f”开头,有19个字符。因此,我可以调用fetch
,但我不能将任何参数传递给此方法?@sidney,您不能将参数传递给进程,因为它正被转换为一个block by&for the map()方法,这意味着map()是将参数传递给块的东西…而map()只传递一个参数。然而,还有其他一些方法可以将多个参数传递给块,例如inject(),但这会导致大量蠕虫,因为Rails#Symbol#to#u proc的实现方式不同于Ruby#Symbol#to#u proc。查看Ruby#Symbol#to_proc的C源代码,我不相信您可以传递多个参数,@sidney,如果您查看第三方库ampex:,它添加了在使用&时传递参数的功能,其中一个示例正是您想要做的。
:"fetch('product_id')"