0

キーが同様のシンボルであるネストされたハッシュの要素にアクセスしようとしています。

favs = { 
  :art => "painters",
  :survey1 => [ 
    {:name => "Josh", :painter => "Dali" },
    {:name => "Mona", :painter => "Monet"}
  ],
  :survey2 => [ 
    {:name => "Leon", :answer => "None"},
    {:name => "Port", :answer => "Picasso"},
  ]
}

Q1: レオンを削除-

私はこれを思いついた:

favs[:survey2].each { |hash|
hash.delete_if { |k,v| 
v=="Leon"
}
}

しかし、名前だけを削除した後、2 番目のキーと値のペア (回答/ペインター) を関連付ける方法がわかりませんでした。

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:

ハッシュの要素ではなく、配列のハッシュを削除する必要があります。

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

A2:

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