Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^3: Maintainance of element order in hash

by hippo (Bishop)
on Sep 29, 2016 at 13:43 UTC ( [id://1172927]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Maintainance of element order in hash
in thread Maintainance of element order in hash

I dont understand how to give nested hashes into it
#!/usr/bin/env perl # Hash order maintained use strict; use warnings; use Test::More tests => 1; use Tie::IxHash; tie my %foo, 'Tie::IxHash'; $foo{a} = [3, 2, 1]; $foo{b} = { s => 'senatus', p => 'populus', q => 'que', r => 'romanus' + }; is_deeply ([keys %foo], [qw/a b/], 'Order retained');

and see perldsc for how to use nested data structures generally.

Replies are listed 'Best First'.
Re^4: Maintainance of element order in hash
by ravi45722 (Pilgrim) on Sep 30, 2016 at 02:44 UTC

    Thanks for reply. I tried this by using your example. But when I dumping the hash it is not in the ordered as we inserted. Where I am missing the logic???

    #!/usr/bin/env perl # Hash order maintained use strict; use warnings; use Test::More tests => 1; use Tie::IxHash; use Data::Dumper; tie my %foo, 'Tie::IxHash'; $foo{a}{c} = [3, 2, 1]; $foo{a}{b}{x} = { s => 'senatus', p => 'populus', q => 'que', r => 'ro +manus'}; $foo{a}{b}{y} = "ravi"; print Dumper \%foo;

      There is no point whatsoever in tieing a hash like %foo to retain the order of its keys when it only has one key as in your example, which is "a". Likewise any subhashes which are untied will not retain the order of their keys. If you wish to retain the order all the way down for some reason then you need to tie all your hashes.

      #!/usr/bin/env perl # Subhash order maintained use strict; use warnings; use Test::More tests => 3; use Tie::IxHash; tie my %a, 'Tie::IxHash'; tie my %b, 'Tie::IxHash'; tie my %x, 'Tie::IxHash'; my %foo; $a{c} = [3, 2, 1]; %x = ( s => 'senatus', p => 'populus', q => 'que', r => 'romanus'); %b = ( x => \%x, y => "ravi" ); $a{b} = \%b; $foo{a} = \%a; is_deeply ([keys %{$foo{a}}], [qw/c b/], '1st level order re +tained'); is_deeply ([keys %{$foo{a}{b}}], [qw/x y/], '2nd level order re +tained'); is_deeply ([keys %{$foo{a}{b}{x}}], [qw/s p q r/], '3rd level order re +tained');

      This all still very much sounds like an XY Problem, however.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (2)
As of 2024-04-26 02:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found