in reply to Re^3: 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?

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

Replies are listed 'Best First'.
Re^5: How i can create hash of arrays of hashes from my 3 arrays?
by BillKSmith (Monsignor) on Mar 16, 2021 at 13:51 UTC
    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
Re^5: How i can create hash of arrays of hashes from my 3 arrays?
by AnomalousMonk (Archbishop) on Mar 15, 2021 at 02:21 UTC
    ... 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:  <%-{-{-{-<

      Hello Bill, Thanks for helping me but i have the issue with multiple entries of the dates for different key. I have following data structure in my hash but i will need only one entry for the date and time which is more recent among all the respective keys and values but i am 2 values - one min and maximum. I will need one value instead. How i can achive?

      My expectation should be below

      ID: 900000001, Net Cat : NETOWORK2 , Valid: 2021-03-10T18:15:54.000Z ID: ID: 566000003, Net Cat : NETOWORK2 , Valid: 2021-03-10T18:15:54.000Z ID: 266000003, Net Cat : Network1 ENV , Valid: 2021-03-08T13:34:59.000Z
      my %hash = $VAR1 = { '900000001' => { 'Network1' => [ 'Not used', 'Not used', 'Not used', 'Not used' ], 'Network1 ENV' => [ '2020-09-09T18:36:5 +0.000Z', '2020-09-09T18:36:5 +0.000Z' ], 'NETOWORK2' => [ '2021-03-10T18:15:54.000 +Z', '2020-12-17T19:36:21.000 +Z', '2021-03-10T18:15:54.000 +Z' ] }, '266000003' => { 'Network1 ENV' => [ '2021-03-08T13:34:5 +9.000Z' ] }, '566000003' => { 'Network1 ENV' => [ '2020-09-09T18:36:5 +0.000Z', '2020-09-09T18:36:5 +0.000Z', '2020-09-09T18:36:5 +0.000Z' ], 'NETOWORK2' => [ '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2020-12-17T19:36:21.000 +Z', '2021-03-10T18:15:54.000 +Z', '2021-03-10T18:15:54.000 +Z', '2020-12-17T19:36:21.000 +Z', '2021-03-10T18:15:54.000 +Z' ], 'Network1' => [ 'Not used', 'Not used' ] } };

      my code snippet below in order to find most recent date for the user among all the keys

      foreach my $key (keys(%hash)) { foreach my net (keys %{ $hash{$key} }) { my $date_time = (sort @{ $ssoidmfadates{$key}{$net} })[-1]; my @dt_dob1 = unpack("A4xA2xA2",$date_time); if (check_date(@dt_dob1)){ print "SSO ID: $key, Mfa Cat : $net , Valid: $date_time\n +"; } else { print "Not used"; } } }