in reply to inverting keys in a 2-D Hash
I can't imagine doing this myself after so carefully constructing a hash to index my data, but, this will do what you want:
foreach my $key ( keys %hash ) { while ( my ( $subkey, $value ) = each %{ $hash{$key} } ) { $hash{ $subkey }{ $key } = $value; } delete $hash{ $key }; }
But what about when there are multiple occurrences of keyB in the original hash? Or multiple subkeys in the subhashes?
Output:#!/usr/bin/perl use strict; use warnings; use feature qw/ say /; use Data::Dumper; my %hash; $hash{'keyA'}{'keyB'} = '1234'; $hash{'keyC'}{'keyB'} = '5678'; say Dumper \%hash; foreach my $key ( keys %hash ) { while ( my ( $subkey, $value ) = each %{ $hash{$key} } ) { $hash{ $subkey }{ $key } = $value; } delete $hash{ $key }; } say Dumper \%hash; __END__
.... is that really what you want?$VAR1 = { 'keyA' => { 'keyB' => '1234' }, 'keyC' => { 'keyB' => '5678' } }; $VAR1 = { 'keyB' => { 'keyC' => '5678', 'keyA' => '1234' } };
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: inverting keys in a 2-D Hash
by melmoth (Acolyte) on Aug 30, 2015 at 22:01 UTC | |
by 1nickt (Canon) on Aug 31, 2015 at 05:29 UTC | |
|
Re^2: inverting keys in a 2-D Hash
by melmoth (Acolyte) on Aug 30, 2015 at 21:49 UTC |