繁体   English   中英

如何在Rails中使用Helper方法迭代包含深层嵌套数组的哈希

[英]How to iterate over a hash that contains deep nested array using helper method in rails

我有一个带有深层嵌套数组的哈希。 我需要对其进行迭代并找到例如56H的值,并提取其相关的人类可读名称Manager 在Rails中使用辅助方法,该怎么办? 这是哈希表:

HASH_TABLE = {
        'Users' => [['Manger','56H'],
                    ['Admin', '56A'],
                    ['Policy', '56B'],
                    ['Member','78C'],
                    ['Guest','764']],
      'Visitor' => [['Worker','55H'],
                    ['Employee','55A'],
                    ['Guest','55B'],
                    ['Temp Member','78C'],
                    ['NA','764AA']]
}

谢谢你的帮助!

在不了解结构或上下文的情况下,我最好的答案是遍历哈希中的每个元素,然后遍历哈希值中的每个数组。 我不确定这里的“人类可读名称”是什么意思,因为哈希键和第一个数组元素都是人类可读名称。 我假设您的意思是下面的代码中的哈希键,但这可能是不正确的。

def human_readable_name(str)
  HASH_TABLE.each do |key, array|
    array.each do |entry|
      return entry[0] if entry[1] == str
    end
  end
  nil
end

如果您要查找多个地址,则可以执行以下操作:

HASH_TABLE.each_with_object({}) { |(_,v),h|
  v.each { |type, value| h[value] = type } }
  #=> {"56H"=>"Manager",     "56A"=>"Admin", "56B"=>"Policy",
  #    "78C"=>"Temp Member", "764"=>"Guest", "55H"=>"Worker",
  #    "55A"=>"Employee",    "55B"=>"Guest", "764AA"=>"NA"}

h["56H"] #=> "Manager"
h["55B"] #=> "Guest"

构造哈希的其他两种方法:

h = Hash[HASH_TABLE.values.flatten(1).map(&:reverse)]

h = Hash[HASH_TABLE.values.flatten(1)].invert

如果HASH_TABLE['Users']HASH_TABLE['Visitor']中都HASH_TABLE['Users']相同的“键”(例如"Employee" ),则可能更有用:

h = HASH_TABLE.each_with_object({}) { |(k,v),h|
  v.each { |type, value| h[value] = [k, type] } }
  # => {"56H"  =>["Users", "Manager"],    "56A"=>["Users", "Admin"],
  #     "56B"  =>["Users", "Policy"],     "78C"=>["Visitor", "Temp Member"],
  #     "764"  =>["Users", "Guest"],      "55H"=>["Visitor", "Worker"],
  #     "55A"  =>["Visitor", "Employee"], "55B"=>["Visitor", "Guest"],
  #     "764AA"=>["Visitor", "NA"]}

h["56H"] #=> ["Users",   "Manager"]
h["55B"] #=> ["Visitor", "Guest"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM