4
是否有红宝石2一个简单的方法/ Rails 3中改造这个:经典哈希点符号哈希
{a: {b: {"1" => 1, "2" => 2}, d: "Something"}, b: {c: 1}}
到这一点:
{"a.b.1" => 1, "a.b.2" => 2, "a.d" => "Something", "b.c" => 1}
我不是在谈论这种精确散列,但将任何散列转换为点符号散列。
是否有红宝石2一个简单的方法/ Rails 3中改造这个:经典哈希点符号哈希
{a: {b: {"1" => 1, "2" => 2}, d: "Something"}, b: {c: 1}}
到这一点:
{"a.b.1" => 1, "a.b.2" => 2, "a.d" => "Something", "b.c" => 1}
我不是在谈论这种精确散列,但将任何散列转换为点符号散列。
这里是最干净的解决方案,我能想出现在:
def dot_it(object, prefix = nil)
if object.is_a? Hash
object.map do |key, value|
if prefix
dot_it value, "#{prefix}.#{key}"
else
dot_it value, "#{key}"
end
end.reduce(&:merge)
else
{prefix => object}
end
end
测试:
input = {a: {b: {"1" => 1, "2" => 2}, d: "Something"}, b: {c: 1}}
p dot_it input
输出:的
{"a.b.1"=>1, "a.b.2"=>2, "a.d"=>"Something", "b.c"=>1}
正是我需要的。谢谢! – Oktav
可能重复[转换嵌套散列成平哈希](http://stackoverflow.com/questions/9647997/converting-a-nested-hash-into-a-flat-hash)。不完全一样,但可以应用于微不足道的变化。 – sawa
是的,可以加入阵列。谢谢! – Oktav