我有一个像这样的数组
[['Europe', 'UK', 'London'], ['Europe', 'UK', 'Bristol'], ['Europe', 'France']]
我想要转换它,所以我有一个嵌套的Hash结构,如下所示:
{"Europe"=>{"UK"=>["London", "Bristol"], "France"=>[]}}
我还希望它以递归方式生成,因此每个数组中的元素数量不受限制。
实现这一目标的最佳方法是什么?
答案 0 :(得分:4)
我会从这样的事情开始:
arr = [['Europe', 'UK', 'London'], ['Europe', 'UK', 'Bristol'], ['Europe', 'France']]
arr.each.with_object({}) do |(region, country, city), hsh|
hsh[region] ||= {}
hsh[region][country] ||= []
hsh[region][country] << city if city
end
# => {"Europe"=>{"UK"=>["London", "Bristol"], "France"=>[]}}
一些改进:
arr.each.with_object({}) do |args, hsh|
target = hsh
args.each { |key| target = target[key] ||= {} }
end
# => {"Europe"=>{"UK"=>{"London"=>{}, "Bristol"=>{}}, "France"=>{}}}