in reply to Finding most popular order in a multidimensional associative array

I am sure this can be golfed down, but here goes:
use strict; my %hash = ( Key1 => [qw(a b b b a a c d b d b)], Key2 => [qw(c a b a b d c c d d d e f)], ); for (sort keys %hash) { my %counted; $counted{$_}++ for @{$hash{$_}}; print "$_:\n"; for (sort { $counted{$b} <=> $counted{$a} } keys %counted) { print "\t$_ = $counted{$_}\n"; } }

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)
  • Comment on (jeffa) Re: Finding most popular order in a multidimensional associative array
  • Download Code

Replies are listed 'Best First'.
Re: (jeffa) Re: Finding most popular order in a multidimensional associative array
by Anonymous Monk on Aug 05, 2002 at 00:48 UTC
    Thank you so very much! One additional question though. What would be the easiest way to list only the top "X" number of the most popular items?
      Hey ... this isn't homework is it? ;)

      A for loop works on a list. The inner for loop iterates on the sorted keys of the hash %counted, what we could do is specify a subscript for that list. First, a simple example:

      use strict; my @array = (0..999); # retrieve only the first 10 elements: my @top_ten = @array[0..9]; print "$_\n" for @top_ten;
      So, if we want to only display the top 3 most popular items, we could do this:
      # ... original code for ((sort { $counted{$b} <=> $counted{$a} } keys %counted)[0..2]) { # ... etc. }
      If you want to avoid hard-coding the number, be sure and subtract 1, or start the subscript at 1:
      # pick one: my $max = 2; # use [0..$max] my $max = 3; # use [1..$max] or [0..$max-1]

      jeffa

      L-LL-L--L-LL-L--L-LL-L--
      -R--R-RR-R--R-RR-R--R-RR
      B--B--B--B--B--B--B--B--
      H---H---H---H---H---H---
      (the triplet paradiddle with high-hat)
      
        Nope, it's not homework! Just a network admin struggling with a programming task. I sure do appreciate the assistance though. Sites like this make me want to find sites where I can go and help people out using my expertise like you have done for me.

        Thanks again.