Ruby - 展平数组和散列的散列
Ruby - flatten a hash of arrays and hashes
已经写了很多关于扁平化哈希的主题,但我找不到任何关于我的情况的信息。
我有哈希数组的哈希等...
类似于:
{
: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"]
如果您可以为此使用 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
会把你的哈希值还给你。
已经写了很多关于扁平化哈希的主题,但我找不到任何关于我的情况的信息。
我有哈希数组的哈希等...
类似于:
{
: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"]
如果您可以为此使用 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
会把你的哈希值还给你。