如果我有一个内部有哈希的数组,我该如何只打印哈希键值对?
complex_array= [ 1,2, 3, "string",
{"app1"=>"123 happy street",
"app2"=>"daf 3 street",
"app3"=>"random street"}, "random", {"another"=>"hash"}
]
我正在尝试:
complex_array.select{|x|
puts x["app1"];
}
不起作用,因为对于数组,您需要一个索引参数(没有字符串转换为整数错误)
那么我怎么只打印哈希值而不先在数组中指定哈希的索引,或者这是唯一的方法呢?
答案 0 :(得分:3)
您可以循环遍历数组的每个元素,并确定该元素的类是否为哈希。如果是,则放置该哈希元素的键值对。如果有多个键值对,则需要进行第二次循环。
complex_array.each do |element|
if element.class == Hash
element.each do |key, value|
puts "key: #{key}, value: #{value}"
end
end
end
答案 1 :(得分:1)
只需选择哈希元素,然后为每个哈希打印键值对:
complex_array.select { |e| e.is_a? Hash }
.each { |h| h.each { |k,v| puts "#{k}=>#{v}" } }
# app1=>123 happy street
# app2=>daf 3 street
# app3=>random street
# another=>hash