我一直在使用arel / rails,并且已经找到了如何使我的组声明正常工作。使用多个列,它会提供类似的输出
{["column1_value","column2_value","column3_value"]=>count,... etc ...}
将此转换为多级哈希的最佳/最简单方法是什么?例如
{column1_value:{
column2_value:{
column3_value1: count,
column3_value2: count
}
column2_value2:{ ...}
}
column2_value2: {....}
}
我明白为什么结果被数组键入,但它不是特别容易使用!。
答案 0 :(得分:2)
或者,如果您更喜欢迭代方法:
a = {[:a, :b, :c]=> 1, [:a, :b, :d]=>2, [:a, :c, :e]=>3}
a.each_with_object({}) { |((*keys, l), v), m|
keys.inject(m) {|mm, key|
mm[key] ||= {}
}[l] = v
}
# {:a=>{:b=>{:c=>1, :d=>2}, :c=>{:e=>3}}}
答案 1 :(得分:1)
def hashify(array, value, hash)
key = array.shift
if array.empty?
hash[key] = value
else
hashify(array, value, hash[key] ||= {})
end
end
a = {[:a, :b, :c]=> 1, [:a, :b, :d]=>2, [:a, :c, :e]=>3}
h = {}
a.each { |k, v| hashify(k, v, h) }
h
# => {:a=>{:b=>{:c=>1, :d=>2}, :c=>{:e=>3}}}