Задать вопрос
Demigodd
@Demigodd

Как в руби осуществить поиск по хэшу?

К примеру есть такой хэш:

var = {
  "aaa"=>{"age"=>11},
  "bbb"=>{
    "age"=>11,
    "children"=>{
      "child_1"=>{"age"=>11},
      "child_2"=>{"age"=>11}
    }
  },
  "ccc"=>{"age"=>11}
}

К примеру в var нужно найти проперти child_2 и получить его.
То есть, как написать функцию которая будет осуществлять поиск по всему хэшу включая children?
  • Вопрос задан
  • 301 просмотр
Подписаться 1 Средний 2 комментария
Решения вопроса 2
2ord
@2ord
Если структура хеша заранее известна и местоположение child_2 не меняется внутри, то в Ruby 2.3+ можно просто так:
var.dig("bbb", "children", "child_1")
Ответ написан
Комментировать
d4mk0f
@d4mk0f
Старость - не страшно, а PHP - не смертельно.
Вот тут, вероятно, есть пример того, что вы хотите в итоге получить.

Стандартных базовых функций для решения данной задачи в Ruby - нет.

Рекурсивная функция, которая бегает по всему хэшу и ищет значения по заданному ключу. MonkeyPatch!!!
class Hash
  def find_all_values_for(key)
    result = []
    result << self[key]
    self.values.each do |hash_value|
      values = [hash_value] unless hash_value.is_a? Array
      values.each do |value|
        result += value.find_all_values_for(key) if value.is_a? Hash
      end
    end
    result.compact
  end
end

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы