2014-05-18 31 views
6

对不起,如果这显而易见,我只是没有得到它。如果我有一组哈希像:如何迭代散列数组并返回单个字符串中的值?

people = [{:name => "Bob", :occupation=> "Builder"}, {:name => "Jim", :occupation => 
"Coder"}] 

而且我想遍历数组和输出字符串,如:“鲍勃:生成器”。我会怎么做?我明白如何迭代,但我仍然有点失落。现在,我有:

people.each do |person| 
    person.each do |k,v| 
    puts "#{v}" 
    end 
end 

我的问题是,我不明白如何返回两个值,只有每个值分开。我错过了什么?

谢谢您的帮助。

回答

15

在这里你去:

puts people.collect { |p| "#{p[:name]}: #{p[:occupation]}" } 

或者:

people.each do |person| 
    puts "#{person[:name]}: #{person[:occupation]}" 
end 

在回答有关在数组中的元素访问的值更一般的查询,你需要知道people是一个数组的哈希。哈希有一个keys方法和values方法,分别返回键和值。考虑到这一点,一个更通用的解决方案可能看起来像:

people.each do |person| 
    puts person.values.join(': ') 
end 
+0

太谢谢你了!这完全清除了我。再次感谢! – splatoperator

+0

.collect方法效果最好。 .each方法导致了很多重复。如果你想要和每个人一起去,那么你必须嵌套 –

0

也可以工作:

people.each do |person| 
    person.each do |key,value| 
    print key == :name ? "#{value} : " : "#{value}\n" 
    end 
end 

输出:

Bob : Builder 
Jim : Coder 
相关问题