0

我正在尝试访问嵌套哈希中的元素,其中键是相似的符号。

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 但不知道如何返回相应的画家。

提前致谢

4

2 回答 2

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.htmlhttp://www.ruby-doc.org/core-2.0/Enumerable.html

于 2013-08-31T19:27:15.843 回答
1

A1:

您必须删除 Array 中的 Hash,而不是 Hash 中的元素。

favs[:survey2].delete_if {|i| i[:name] == "Leon"}

A2:

favs[:survey1].find { |i| i[:name] == "Josh" }[:painter]
于 2013-08-31T19:28:11.563 回答