如何在Ruby中从数组的哈希值的哈希值构建哈希值的哈希值

born2Learn

我有以下数组哈希的哈希值:

Hash["signin"]["elementname"]["ids"]` -- here ids are "macid" and "winid"

其结构就像elementname具有两种idmacidwinid

在运行时,当我说一个参数时,mac然后我试图从仅具有的现有哈希构建一个哈希macid因此,我正在尝试转换Hash["signin"]["elementname"]["ids"]

埃里克·亨德森(Eric Henderson)

这应该工作

Hash[common_ids.map { |a|
  [a[0], Hash[a[1].map { |b|
    [b[0], b[1]['mac_id']]
  }]]
}]

您需要执行Hash [...]部分,因为哈希表上的map方法会将其转换为键-值对数组。

希望该代码对您有用。它在irb中为我工作。您可能需要将a和b变量重命名为更有意义的名称。

这里是一些解释:

在散列上调用.map时,它以[k,v]数组的形式提供每个值,它期望该块的内容求值为[k,v]数组,并且.map返回的结果是一个数组[k,v]个数组。Hash [...]用于将数组的样式转换回Hash(请参阅http://ruby-doc.org/core-2.1.5/Hash.html#method-c-5B-5D)。

为了

common_ids = {"signin"=> { "company_txt"=>{"mac_id"=> "mac_id_1", "win_id"=> "win_id_1"}, "username_txtbx"=> {"mac_id"=>"mac_id_2", "win_id"=>"win_id_2"} } }

这是发生了什么:

一级块(带有参数a)获取

a = ["signin", { "company_txt"=>{"mac_id"=> "mac_id_1", "win_id"=> "win_id_1"}, "username_txtbx"=> {"mac_id"=>"mac_id_2", "win_id"=>"win_id_2"} }]

它使用第二个块(带有参数b)在该数组的第二个条目(键-值对的值部分)上调用map,该块首先获取

b = ["company_txt", {"mac_id"=> "mac_id_1", "win_id"=> "win_id_1"}]

它返回

["company_txt", "mac_id_1"]

然后得到

b = ["username_txtbx", {"mac_id"=>"mac_id_2", "win_id"=>"win_id_2"}]

它返回

["username_txtbx", "mac_id_2"]

该内部图的结果是

[["company_txt", "mac_id_1"], ["username_txtbx", "mac_id_2"]]

对此调用Hash [...]

{"company_txt" => "mac_id_1", "username_txtbx" => "mac_id_2"}

然后,将其作为外部映射的数组的第二个元素给出,从而得到

["signin", {"company_txt" => "mac_id_1", "username_txtbx" => "mac_id_2"}]

如果您有common_ids的第二个顶级元素,则将导致相同的处理。外部地图调用完成后,您可以

[["signin", {"company_txt" => "mac_id_1", "username_txtbx" => "mac_id_2"}], ...]

其中...表示common_ids的其他顶级元素将到达的位置。

对此调用Hash [...]

{"signin" => {"company_txt" => "mac_id_1", "username_txtbx" => "mac_id_2"}, ...}

其中...表示形式为k => v的任何其他顶级键值对。

希望这种解释有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章