Arrays 如何从数组中的散列中获取值

Arrays 如何从数组中的散列中获取值,arrays,ruby,hash,jruby,Arrays,Ruby,Hash,Jruby,我有一个数组,由具有相同结构的多个哈希组成。我还有另一个填充字符串的数组: prop_array = [ {:name=>"item1", :owner=>"block1",:ID=>"11"}, {:name=>"item2", :owner=>"block2",:ID=>"22"}, {:name=>"item3", :owner=>"block3"

我有一个数组,由具有相同结构的多个哈希组成。我还有另一个填充字符串的数组:

prop_array = [
                {:name=>"item1", :owner=>"block1",:ID=>"11"},
                {:name=>"item2", :owner=>"block2",:ID=>"22"},
                {:name=>"item3", :owner=>"block3",:ID=>"33"},
                {:name=>"item4", :owner=>"block4",:ID=>"44"}
            ]


owner_array = ["block1","block2","block3","block4"]
我想检查散列中的
:owner
值是否与
owner\u数组中的任何字符串匹配,并将变量
:partID
设置为
:ID
值:

我尝试了以下方法,但无效:

owner_array.each do |owner|
    prop_array.each do |prop|
        prop.each do |key, value|
            if key[:owner] == owner.to_s
                puts "YES"
                partID = key[:ID]
                puts partID
            end
        end
    end
end
如果正确运行,则应返回partID

=> "11"
=> "22"
=> "33"
=> "44"
我想检查散列中的“:owner”值是否匹配 使用owner_数组中的任何字符串

将变量“:partID”设置为“:ID”值

编辑 由于希望在循环中指定这些值,请使用:

partID = prop_array.select { |hash| owner_array.include?(hash[:owner]) }.each do |hash|
  # assignment happens here one by one
  cell_id = hash[:ID] # or whatever logic you have to assign this ID to cell
end

如果给定prop_数组和owner_数组,您的计算结果应该是什么?在您的示例中,您将有四个匹配项,您是否介意澄清
将变量“:partID”设置为“:ID”值的含义?您的问题不清楚。“将变量”:partID“设置为”:ID“值”意味着什么<代码>:partID
不是变量的有效名称。还有,“不起作用”是什么意思?它以什么方式不起作用?是否有错误消息?如果是,错误消息的确切文本是什么,它指的是哪一行?您是否期望不同的输出?你期望什么样的产出?为什么?你得到了什么样的输出?你知道为什么吗?还有,这和什么有关系?我想将该值存储在ruby的电子表格gem中的一个单元格中。这可能吗?您的方法可以工作,但它以数组的形式返回,我需要一个值来存储数据。@danynl您在问题中要求4个值-我向您演示了如何。您能指定可以改进的内容吗?基本上,我一次只需要一个值,这样我就可以使用电子表格gem将该值插入excel文件的单元格中。我对这个问题进行了编辑,所以它应该更有意义now@danynl你在这个网站上所做的是被禁止的。你问了一个问题。我问过了。你编辑了问题,我编辑了答案。你又编辑了一遍,我又编辑了答案。现在你第四次修改了问题,这是不合适的。你应该接受我对你问题前三种形式的回答,然后去问一个新的。但下次一定要弄清楚;)
 partID = prop_array.select { |hash| owner_array.include?(hash[:owner]) }
                    .map    { |hash| hash[:ID] }
 #=> ["11", "22", "33", "44"]
partID = prop_array.select { |hash| owner_array.include?(hash[:owner]) }.each do |hash|
  # assignment happens here one by one
  cell_id = hash[:ID] # or whatever logic you have to assign this ID to cell
end