在红宝石中构建数据结构



我正在尝试通过在数组上循环构建数据结构。这就是我拥有的

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"}
     }
}

最新更新