我正在尝试通过在数组上循环构建数据结构。这就是我拥有的
a = ['a1', 'a2']
def func(name)
{name =>
{'key1'=> 'value2',
'key2'=> 'value2'
}
}
end
content = {'root'=>
a.each do | v |
func(v)
end
}
给我
{"root"=>["a1","a2"]}
我之后
{
"r"=> {
"a1"=> {
"key1"=> "value2",
"key2"=> "value2"
},
"a2"=> {
"key1"=> "value2",
"key2"=> "value2"
}
}
}
有人可以告诉我我出错的地方吗?
您正在使用each
,仅返回数组本身。您需要使用map
:
content = { 'root' =>
a.map do | v |
func(v)
end
}
或在更好的语法中,因为该块是一行:
content = {
'root' => a.map { |v| func(v) }
}
它仍然需要一些重构,但是您会明白。如果使用地图,它将返回数组,结果" R"将是数组而不是哈希。
{"r": a.each_with_object(Hash.new(0))
{ |h1, h2| h2[h1]={"key1"=>"value2", "key2"=>"value2"} }
}
它将完全返回
{:r=>{
"a1"=>{"key1"=>"value2", "key2"=>"value2"},
"a2"=>{"key1"=>"value2","key2"=>"value2"}
}
}