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

... 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:  <%-{-{-{-<

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

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