如何解决显示大型嵌套哈希的结构
我要检查的哈希值很大,但是由于值太多,因此很难直观地看到正在发生的事情。
例如说这是哈希:
{
days: {
monday: [1,2,3,4],# There are thousands of values here
tuesday: [1,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
这是一个递归方法,如果值是哈希值,它将自行运行,否则返回values类。
样本输入的结果与预期的输出匹配,但是仍有改进的余地。就像如果数组中的所有值都相同然后显示值类型(例如“整数数组”),或者如果数组包含相似的哈希值,那么这些哈希值是什么样的?
解决方法
我认为#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,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}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。