【问题标题】:Ruby - flatten a hash of arrays and hashes [closed]Ruby - 展平数组和散列的散列[关闭]
【发布时间】:2018-12-28 20:58:15
【问题描述】:

关于扁平化哈希的主题已经写了很多,但我找不到任何关于我的情况的信息。

我有一个散列数组的散列,等等......

类似:

{
  :medical_address => [
    {
      :address_1 => nil,
      :city => nil,
      :state => nil,
      :zip5 => nil,
      :zip9 => nil
    }
  ],
  :pharmacy_address => [
    {
      :address_1 => nil,
      :city => nil,
      :state => nil,
      :zip5 => nil,
      :zip9 => nil
    }
  ],
  :address => [],
  :member_phone => "8000000000",
  :provider_phone => nil,
  :phone => [
    "800-000-0000",
    "8000000000",
    "800-000-0000",
    "8000000000",
    "800-624-5060",
    "8006245060",
    "804-673-1678",
    "8046731678",
    "888-258-3432",
    "8882583432",
    "800-000-0000",
    "8000000000",
    "800-000-0000",
    "8000000000",
    "800-000-0000",
    "8000000000",
    "800-624-5060",
    "8006245060",
    "804-673-1678",
    "8046731678",
    "888-258-3432",
    "8882583432"
  ],
  :website => [
    "www.fopblue.org",
    "www.fepblue.org",
    "www.fepblue.org",
    "www.fopblue.org"
  ]
}

我想把它展平成一个数组。

任何人有一个很好的简单递归函数可以方便地做到这一点? 我希望结果如下所示:

[:medical_address,:address_1, nil, :city, nil, :state, nil, :zip5, nil, :zip9, nil, :pharmacy_address, :address_1, nil, :city, nil, :state, nil, :zip5, nil, :zip9, nil,, :address,, :member_phone, "8000000000", :provider_phone, nil, :phone,"800-000-0000", "8000000000", "800-000-0000", "8000000000", "800-624-5060", "8006245060", "804-673-1678", "8046731678", "888-258-3432", "8882583432", "800-000-0000", "8000000000", "800-000-0000", "8000000000", "800-000-0000", "8000000000", "800-624-5060", "8006245060", "804-673-1678", "8046731678", "888-258-3432", "8882583432", :website,"www.fopblue.org", "www.fepblue.org", "www.fepblue.org", "www.fopblue.org"] 

【问题讨论】:

  • 你可以为上面的哈希添加预期的输出吗?

标签: ruby-on-rails arrays ruby hash flatten


【解决方案1】:

如果您对使用 gem 没问题,有一个多用途的 Iteraptor gem。

input = [your structure]
input.iteraptor.flatten
# ⇒ {"medical_address.0.address_1"=>nil,
#    "medical_address.0.city"=>nil,
#    "medical_address.0.state"=>nil,
#    "medical_address.0.zip5"=>nil,
#    "medical_address.0.zip9"=>nil,
#    "pharmacy_address.0.address_1"=>nil,
#    "pharmacy_address.0.city"=>nil,
#    "pharmacy_address.0.state"=>nil,
#    "pharmacy_address.0.zip5"=>nil,
#    "pharmacy_address.0.zip9"=>nil,
#    "member_phone"=>"8000000000",
#    "provider_phone"=>nil,
#    "phone.0"=>"800-000-0000",
#    "phone.1"=>"8000000000",
#    "phone.2"=>"800-000-0000",
#    "phone.3"=>"8000000000",
#    "phone.4"=>"800-624-5060",
#    "phone.5"=>"8006245060",
#    "phone.6"=>"804-673-1678",
#    "phone.7"=>"8046731678",
#    "phone.8"=>"888-258-3432",
#    "phone.9"=>"8882583432",
#    "phone.10"=>"800-000-0000",
#    "phone.11"=>"8000000000",
#    "phone.12"=>"800-000-0000",
#    "phone.13"=>"8000000000",
#    "phone.14"=>"800-000-0000",
#    "phone.15"=>"8000000000",
#    "phone.16"=>"800-624-5060",
#    "phone.17"=>"8006245060",
#    "phone.18"=>"804-673-1678",
#    "phone.19"=>"8046731678",
#    "phone.20"=>"888-258-3432",
#    "phone.21"=>"8882583432",
#    "website.0"=>"www.fopblue.org",
#    "website.1"=>"www.fepblue.org",
#    "website.2"=>"www.fepblue.org",
#    "website.3"=>"www.fopblue.org"}

请注意,展平是可逆的,result.recoger 将返回您的哈希值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2014-06-24
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2014-08-31
    相关资源
    最近更新 更多