2013-08-20 40 views
0

如果我有以下的数组:使用散列密钥来指代现有阵列

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

和该散列:

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

我如何将通过散列迭代,并使用该密钥值回到阵列,以便我可以拉动,例如,爱丽丝手机的事实?

+7

我强烈建议,以避免依赖变量'的名字。你可以创建另一个哈希值,比如'person1 = {alice => [“phone”,“something else”]}',然后将所有人收集到'persons'数组中并查询该数组。再次,不要依赖变量命名。 – tkroman

+0

赞同@cdshines这个模式闻起来很糟糕。 – fguillen

+0

很好的建议。我会去做。 – AltGrendel

回答

2

你需要有一个哈希如下第一:

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 

,或者

test_hash.each{|k,v| puts hsh[k] if hsh.has_key?(k)} 
# >> phone 
# >> telegraph 
# >> paper 
# >> book 
# >> photograph 
# >> painting 
+0

谢谢,这是要走的路。这是一个“首先做对”的案例。 – AltGrendel

+0

@AltGrendel很好,你选择了正确的方式,但你的问题是“我将如何遍历散列并使用键值返回数组”,而不是“实现数据结构的最佳实践”。 ;-p – jaeheung

+0

没错,我很欣赏你们两个都给了我这个问题的实际答案,并建议我在引发问题之前保持最佳实践。 – AltGrendel

1

不推荐,但可行的:

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'}