Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: How i can create hash of arrays of hashes from my 3 arrays?

by BillKSmith (Monsignor)
on Mar 13, 2021 at 11:43 UTC ( #11129564=note: print w/replies, xml ) Need Help??


in reply to How i can create hash of arrays of hashes from my 3 arrays?

#$hash{$array1[$_]}{$array2[$_]} = $array3[$_] for (0..$#array1); push @{$hash{$array1[$_]}{$array2[$_]}}, $array3[$_] for (0..$#array1 +);

UPDATE: Create hash-of-hash-of-arrays as hinted in OP code. This still does not agree with the title of the thread. Add output of updated code.

OUTPUT: $VAR1 = { '400000008' => { 'Network1' => [ '2021-01-25T17:19:36.000Z' ] }, '500000008' => { 'Network2' => [ 'Not Used' ], 'Network1' => [ '2021-03-10T17:11:24.000Z', '2021-03-11T17:12:42.000Z' ], 'Network3' => [ 'Not Used' ] }, '900000001' => { 'Network1' => [ 'Login' ] }, '900000003' => { 'No Network1' => [ ' NOT Registered' ] }, '900000005' => { 'Network1' => [ 'Login' ] }, '900000007' => { 'Network1' => [ '2021-03-10T17:11:24.000Z', '2021-02-18T08:34:58.000Z', '2021-01-25T17:19:44.000Z' ] }, '900000002' => { 'Network1' => [ '2019-11-07T20:31:10.000Z', '2021-02-19T13:47:25.000Z', '2021-03-10T13:58:50.000Z' ] }, '900000004' => { 'Network1' => [ 'Login' ] }, '900000006' => { 'Network1' => [ 'Login2' ] } };
Bill

Replies are listed 'Best First'.
Re^2: How i can create hash of arrays of hashes from my 3 arrays?
by chandantul (Scribe) on Mar 13, 2021 at 21:35 UTC

    Thanks Bill This really helps but i will need to compare an array with User id details and then print the corrosponding Network details with recent login information and the counts the users attempts per Network . If user not logged in to a respective network then will use "Not Used" is that possible for you to help? I have included my effort on this function

    @array4 900000001 900000002 900000007 900000009 900000010 900000011 900000012 500000008
    foreach my $id (sort keys %hash) { foreach my $network(keys %{ $hash{$id} }) { foreach (0..$#array4) { if (exists $hash{$array4}{$network}) { print $hash5{$array4}; } else { print "Not Loggedin"; } } } }
      Your new specification makes little or no sense. I think you want to print the hash data for the users specified in @array4. Here is my attempt at that.
      foreach my $id (@array4) { print "User $id\n"; if (!exists $hash{$id}) { print " not logged in\n\n"; next; } foreach my $net (keys %{$hash{$id}}) { print " $net\n"; local $" = "\n "; print " @{$hash{$id}{$net}}\n"; } print "\n"; }
      OUTPUT: User 900000001 Network1 Login User 900000002 Network1 2019-11-07T20:31:10.000Z 2021-02-19T13:47:25.000Z 2021-03-10T13:58:50.000Z User 900000007 Network1 2021-03-10T17:11:24.000Z 2021-02-18T08:34:58.000Z 2021-01-25T17:19:44.000Z User 900000009 not logged in User 900000010 not logged in User 900000011 not logged in User 900000012 not logged in User 500000008 Network1 2021-03-10T17:11:24.000Z 2021-03-11T17:12:42.000Z Network2 Not Used Network3 Not Used
      Bill

        Hello Bill, This is very nice that you are helping me here. Thanks for the same. I was able to create the hash of arrays and hashes but unable detirmine the recent dates from users

        My expectation should be 1 recent date 2021-03-10T13:58:50.000Z . Please check below code, i was trying

        User 900000002 Network1 2019-11-07T20:31:10.000Z 2021-02-19T13:47:25.000Z 2021-03-10T13:58:50.000Z
        my %iddates; for my $key (keys(%iddates)) { foreach my $fact1 (keys %{ $iddates{$key} }) { $iddates{$key}{$fact1}; my @numbers = map { $_->[1] } values(%{$iddates{$key}}); printf("%dd: max: %s", $key, maxstr(@numbers)); } }

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2022-05-29 09:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (101 votes). Check out past polls.

    Notices?