我正在尝试访问嵌套哈希中的元素,其中键是相似的符号。
favs = {
:art => "painters",
:survey1 => [
{:name => "Josh", :painter => "Dali" },
{:name => "Mona", :painter => "Monet"}
],
:survey2 => [
{:name => "Leon", :answer => "None"},
{:name => "Port", :answer => "Picasso"},
]
}
Q1:删除Leon-
我想出了这个:
favs[:survey2].each { |hash|
hash.delete_if { |k,v|
v=="Leon"
}
}
但在删除名称之后,我无法弄清楚如何在(答案/画家)中绑定第二个键值对。
Q2返回Josh最喜欢的画家 - 同样的问题,我可以找到:name => Josh但不确定如何返回相应的画家。提前致谢
答案 0 :(得分:1)
就像我在评论中提到的那样,当它们变得太原始时,不要使用原语,呃,原始的。嵌套的任何事都暗示着你处于那个阶段:
class Student
attr_reader :name
attr_reader :favourite_painter
def initialize( name, opts={} )
@name = name
@favourite_painter = opts[:favourite_painter]
end
end
students = []
students << Student.new( "Josh", :favourite_painter => "Dali" )
students << Student.new( "Mona", :favourite_painter => "Monet" )
# etc…
并查看http://www.ruby-doc.org/core-2.0/Array.html和http://www.ruby-doc.org/core-2.0/Enumerable.html。
答案 1 :(得分:1)
A1:
您必须删除数组中的哈希值,而不是哈希值中的元素。
favs[:survey2].delete_if {|i| i[:name] == "Leon"}
A2:
favs[:survey1].find { |i| i[:name] == "Josh" }[:painter]