Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Get all hash value into array

by 1nickt (Canon)
on Feb 01, 2020 at 19:01 UTC ( [id://11112236]=note: print w/replies, xml ) Need Help??


in reply to Get all hash value into array

Hi, as others have pointed out, your data structure is terrible. You should change the code that generates it if possible. If you are stuck with it ...

First transform the data into something easy to work with. Then get your lists.

use warnings; use strict; use feature 'say'; use Data::Dumper; $Data::Dumper::Terse = $Data::Dumper::Indent = $Data::Dumper::Sortkeys + = 1; $Data::Dumper::Quotekeys = 0; my $in = get_input(); my %out; for my $id (keys %{ $in }) { for my $state (keys %{ $in->{$id} }) { $out{$state} = { map { split '=' } @{ $in->{$id}{$state} } }; }; } say 'Transformed input: ', Dumper \%out; say 'All states: ', Dumper [map { $_->{state_name} } values %out]; say 'Commented: ', Dumper [map { $_->{state_name} } grep { $_->{commen +ts} } values %out]; #---------------------------------------------------------# sub get_input { return { 99155 => { PR => [ 'state_name=Puerto Rico', 'county_names_all=Adjuntas|Utuado', ], AK => [ 'state_name=Alaska', 'county_names_all=Ketchikan Gateway|Prince of Wales-Hy +der', ], WA => [ 'state_name=Washington', 'county_names_all=Pend Oreille|Spokane|Lincoln|Adams', 'comments=America/Los_Angeles', ], }, 26134 => { WV => [ 'state_name=West Virginia', 'county_names_all=Wirt|Wood|Jackson|Ritchie|Calhoun', 'comments=America/New_York', ], }, }; }
Output:
Transformed input: { AK => { county_names_all => 'Ketchikan Gateway|Prince of Wales-Hyder', state_name => 'Alaska' }, PR => { county_names_all => 'Adjuntas|Utuado', state_name => 'Puerto Rico' }, WA => { comments => 'America/Los_Angeles', county_names_all => 'Pend Oreille|Spokane|Lincoln|Adams', state_name => 'Washington' }, WV => { comments => 'America/New_York', county_names_all => 'Wirt|Wood|Jackson|Ritchie|Calhoun', state_name => 'West Virginia' } } All states: [ 'Alaska', 'Washington', 'Puerto Rico', 'West Virginia' ] Commented: [ 'Washington', 'West Virginia' ]
See map, grep, split.

Hope this helps!

The way forward always starts with a minimal test.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11112236]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2024-04-24 12:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found