首页 > 解决方案 > 如何迭代 3D 散列

问题描述

我有一个使用yaml文件中的数据生成的 3D 哈希。我需要获取每个数组的键并将其加入它的值,以便在表单的选择字段上显示它们。

我尝试使用each, for...in, hash.keys,但它们将散列返回为一个而不是分隔hash.valuesmap

这是哈希的结构:

{
   "AC"=>
       {
         "ACRELANDIA"=>419,
         "ASSIS BRASIL"=>111
       },
    "AL"=>
        {
         "AGUA BRANCA"=>2701,
         "ANADIA"=>2703
        }
}

最后我希望结果是这样的:

AC - ACRELANDIA: 419

AC - ASSIS BRASIL: 111

...等等每个城市。

标签: rubyloopshash

解决方案


您可以执行以下操作,

hash = {
   "AC"=> { "ACRELANDIA"=>419, "ASSIS BRASIL"=>111 },
   "AL"=> { "AGUA BRANCA"=>2701, "ANADIA"=>2703 }
}

hash.flat_map { |x,y| y.map { |z| "#{x} - #{z[0]}: #{z[1]}" } }

# => ["AC - ACRELANDIA: 419", "AC - ASSIS BRASIL: 111", "AL - AGUA BRANCA: 2701", "AL - ANADIA: 2703"]

推荐阅读