在不知道数组维度的情况下,如何将数组转换为嵌套哈希?
例如:
[["Message", "hello"]]
为:
{{:message => "Hello"}}
或者:
[["Memory", [["Internal Memory", "32 GB"], ["Card Type", "MicroSD"]]]]
为:
{{:memory => {:internal_memroy => "32 GB", :card_type => "MicroSD"}}}
或:
[["Memory", [["Internal Memory", "32 GB"], ["Card Type", "MicroSD"]]], ["Size", [["Width", "12cm"], ["height", "20cm"]]]]
为:
{ {:memory => {:internal_memroy => "32 GB", :card_type => "MicroSD"}, {:size => {:width => "12cm", :height => "20cm" } } }
答案 0 :(得分:1)
考虑到嵌套数组对的格式,后续函数将其转换为您想要的哈希
def nested_arrays_of_pairs_to_hash(array)
result = {}
array.each do |elem|
second = if elem.last.is_a?(Array)
nested_arrays_to_hash(elem.last)
else
elem.last
end
result.merge!({elem.first.to_sym => second})
end
result
end
较短的版本
def nested_arrays_to_hash(array)
return array unless array.is_a? Array
array.inject({}) do |result, (key, value)|
result.merge!(key.to_sym => nested_arrays_to_hash(value))
end
end
答案 1 :(得分:-1)
> [:Message => "hello"]
=> [{:Message=>"hello"}]
因此:
> [:Message => "hello"][0]
=> {:Message=>"hello"}