У меня есть большой хэш, который я пытаюсь проверить, но из-за большого количества значений трудно визуально увидеть, что происходит.
Например, скажем, это хеш:
{
days: {
monday: [1,2,3,4], # There are thousands of values here
tuesday: [1,2,3,4]
},
movies: {
action: ['Avengers', 'My Little Pony'],
adventure: ['Dorra The Explorer'],
comedy: ['Star Wars']
},
data_quality: 0.9,
verified: true
}
Что-то идет не так, и мне нужно выяснить, что здесь происходит. Возможно, мне не хватает категории фильмов, дня недели или чего-то другого из другой области.
Поскольку массивы состоят из тысяч элементов, я не могу просто посмотреть на них, чтобы увидеть, чего не хватает.
В идеале хотелось бы примерно такого:
{
days: {
monday: Array,
tuesday: Array
},
movies: {
action: Array,
adventure: Array,
comedy: Array
},
data_quality: Float,
verified: TrueClass
}
Это упростит анализ данных.
Это метод, который я сейчас использую:
def hash_keys(hash)
unless hash.is_a?(Hash)
return hash.class
end
keys_hash = {}
hash.each do |key, value|
keys_hash[key] = hash_keys(value)
end
keys_hash
end
Это рекурсивный метод, который запускается сам, если значение является хешем, и возвращает класс значений в противном случае.
Результат для образца ввода соответствует ожидаемому, однако есть возможности для улучшения. Например, если все значения в массиве одинаковы, тогда отображается тип значения (например, «Массив целых») или если массив содержит похожие хэши, то как эти хеши выглядят?
1 ответ
Я думаю, что #transform_values
является идеальный вариант, чтобы помочь здесь:
def deep_values_transform(hash)
hash.transform_values do |value|
if value.is_a?(Hash)
deep_values_transform(value)
else
value.class
end
end
end
> hash = {
days: {
monday: [1,2,3,4],
tuesday: [1,2,3,4]
},
movies: {
action: ['Avengers', 'My Little Pony'],
adventure: ['Dorra The Explorer'],
comedy: ['Star Wars']
},
data_quality: 0.9,
verified: true
}
> deep_values_transform hash
=> {:days=>{:monday=>Array, :tuesday=>Array}, :movies=>{:action=>Array, :adventure=>Array, :comedy=>Array}, :data_quality=>Float, :verified=>TrueClass}
Похожие вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].