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

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"; } } } }

Replies are listed 'Best First'.
Re^3: How i can create hash of arrays of hashes from my 3 arrays?
by BillKSmith (Monsignor) on Mar 14, 2021 at 23:47 UTC
    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)); } }
        Your follow-up questions and sample code indicate that you are attempting a project far beyond your skill level. I strongly suggest that you get a copy of the book 'Learning Perl". Start at the beginning and do every exercise. The ones that are easy will waste very little time. The hard ones will show you where study is required. As you study, it is as important to learn the correct Perl names for things as it is to learn the coding techniques. Of course, you can ask an occasional question here, but remember that the idea is to learn by doing it yourself.
        Bill
        ... detirmine the [most] recent dates from users

        The date-timestamps are held in the anonymous array references that are the values of the key(s) of $hash{$id}{$net}. As suggested by choroba here, the particular format of these date-timestamps is easily sort-ed to determine temporal order:

        Win8 Strawberry 5.8.9.5 (32) Sun 03/14/2021 21:56:16 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings my %hash; $hash{'ID'}{'NET'} = [ qw( 2019-11-07T20:31:10.000Z 2021-03-10T13:58:50.000Z 2021-02-19T13:47 +:25.000Z ) ]; my $most_recent_date_time = (sort @{ $hash{'ID'}{'NET'} })[-1]; print "'$most_recent_date_time' \n"; ^Z '2021-03-10T13:58:50.000Z'
        Try some other date-timestamps (with the identical format!) and convince yourself this is true.

        (And congratulations on having had an almost-complete solution finally delivered into your hands! Please see the Offering Plate. :)


        Give a man a fish:  <%-{-{-{-<