Szukanie w wielopoziomowym hash'u

Cześć,

Mam problem z wyszukaniem odpowiedniej metody przeszukiwania hash’a

Mam coś w stylu
{ “key1” => “1”,
“key2” => “22”,
“key3” => {“abra”=> “12”, “kadabra”=>“37” },

“keyX” => {“key33”=> “4444”, {“key103”=> “44”, “key555”=>“666” }, {“abra”=> “12”, “kadabra”=>“37” } }

}

Czyli wielopoziomowy “misz-masz”

Jak sprawdzić, czy w tym całym hash’u występuje jakiś klucz np “Key999” i jaka jest jego wartość, bez względu na poziom zagnieżdżenia?

A co w przypadku gdy takich kluczy będzie więcej niż jeden? BTW “hashu”, nie “hash’u”.

Jeżeli będzie więcej, to niech poda wartość pierwszego wystąpienia danego klucza

Pierwsze wystąpienie klucza będzie zależało od przyjętej metody poszukiwań. Jeśli zakładamy, że ten problem z jakiegoś powodu nie jest tak ważny, możemy zrobić coś takiego:

def value_for(hash, searched_key)
  hash.each do |key, value|
    return value if key == searched_key
    if value.is_a?(Hash)
      nested_value = value_for(value, searched_key)
      return nested_value if nested_value
    end
  end
  nil
end

Na szybko wymyślone i nieprzetestowane, więc może być kiepskie.

Sprawdzę wieczorkiem.

Dzięki :slight_smile: