http://qs321.pair.com?node_id=485159


in reply to Array Question

There are two problems here:
1) count the occurance of words
2) display the words and occurances in decending order.

Try this...
my %count; for (@letters) { $count{$_}++; } for ( map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [ $_, $count{$_} ] } keys %count ) { print $_, "=>", $count{$_}, "\n"; }


Replies are listed 'Best First'.
Re^2: Array Question
by ikegami (Patriarch) on Aug 19, 2005 at 14:44 UTC

    Using Schwartzian Transform here is overkill, because hash lookups are very efficient. Simplification:

    my @letters = qw( red red red blue white yellow blue navy navy green white cars ); my %count; $count{$_}++ foreach @letters; print("$_ => $count{$_}\n") foreach sort { $count{$b} <=> $count{$a} } keys %count;

    Output:

    red => 3 blue => 2 white => 2 navy => 2 cars => 1 green => 1 yellow => 1

    Kudos for being the first to sort the results, though.