Ruby 使用哈希键引用现有数组

Ruby 使用哈希键引用现有数组,ruby,Ruby,如果我有以下阵列: alice = ["phone", "telegraph"] bob = ["paper", "book" ] carol = ["photograph", "painting"] 这个散列: test_hash = { "alice" => "employee 1", "bob" => "employee 2", "carol" => "employee 3" } 我如何迭代散列并使用键值引用回数组,以便提取(例如)alice拥有手机的事实 首先需

如果我有以下阵列:

alice = ["phone", "telegraph"]
bob   = ["paper", "book" ]
carol = ["photograph", "painting"]
这个散列:

test_hash = { "alice" => "employee 1", "bob" => "employee 2", "carol" => "employee 3" }

我如何迭代散列并使用键值引用回数组,以便提取(例如)alice拥有手机的事实

首先需要有一个如下所示的散列:

hsh = {"alice" => ["phone", "telegraph"],
       "bob"   => ["paper", "book" ],
       "carol" => ["photograph", "painting"]}

test_hash = { "alice" => "employee 1", "bob" => "employee 2", "carol" => "employee 3" }

test_hash.each{|k,v| puts v if hsh.has_key?(k)}
# >> employee 1
# >> employee 2
# >> employee 3
或者


您首先需要有一个如下所示的哈希:

hsh = {"alice" => ["phone", "telegraph"],
       "bob"   => ["paper", "book" ],
       "carol" => ["photograph", "painting"]}

test_hash = { "alice" => "employee 1", "bob" => "employee 2", "carol" => "employee 3" }

test_hash.each{|k,v| puts v if hsh.has_key?(k)}
# >> employee 1
# >> employee 2
# >> employee 3
或者


不推荐,但可行:

alice = ["phone", "telegraph"]
bob   = ["paper", "book" ]
carol = ["photograph", "painting"]

test_hash = { "alice" => "employee 1", "bob" => "employee 2", "carol" => "employee 3" }

test_hash.keys.each {|k| puts "#{k} has phone." if eval(k).include? 'phone'}

不推荐,但可行:

alice = ["phone", "telegraph"]
bob   = ["paper", "book" ]
carol = ["photograph", "painting"]

test_hash = { "alice" => "employee 1", "bob" => "employee 2", "carol" => "employee 3" }

test_hash.keys.each {|k| puts "#{k} has phone." if eval(k).include? 'phone'}

我强烈建议避免依赖变量的名称。你可以做另一个散列,比如
person1={alice=>[“phone”,“something other”]}
,然后将你所有的人收集到
persons
数组中并查询该数组。再次强调,不要依赖变量命名。同意@CDP。这个模式很难闻。好建议。我会的。我强烈建议避免依赖变量的名称。你可以做另一个散列,比如
person1={alice=>[“phone”,“something other”]}
,然后将你所有的人收集到
persons
数组中并查询该数组。再次强调,不要依赖变量命名。同意@CDP。这个模式很难闻。好建议。我会的。谢谢,这就是路。这是一个“首先要做正确的事情”的例子。@AltGrendel很好,你选择了正确的方法,但是你的问题是“我如何迭代散列并使用键值引用回数组”,而不是“实现数据结构的最佳实践是什么”-P真的,我很感激你们两位给了我这个问题的实际答案,并建议我在最佳实践出现问题之前保持最佳实践。谢谢,这是一条路。这是一个“首先要做正确的事情”的例子。@AltGrendel很好,你选择了正确的方法,但是你的问题是“我如何迭代散列并使用键值引用回数组”,而不是“实现数据结构的最佳实践是什么”-P真的,我很感激你们两位给了我这个问题的实际答案,并建议我在最佳实践出现问题之前保持它。