in reply to Re^4: Building an array of hashes, and then sorting keys with each hash
in thread Building an array of hashes, and then sorting keys with each hash

I want to try to retrieve the best match/(row) for each ID based on their top score.

You want to group the records by id, and sort each group by score.

Hashes are great for grouping.

my %rows_by_id; while (<CBLAT>) { chomp; my %row; @row{qw( score id )} = ( split /\t/ )[ 0, 9 ]; my $id = $row{id}; push @{ $rows_by_id{$id} }, \%row; } for my $id (keys %rows_by_id) { # Add "sort" if desired my $rows = $rows_by_id{$id}; @$rows = sort { $b->{score} <=> $a->{score} } @$rows; my $best_row = $rows->[0]; print("Best score for id $id: $best_row->{score}\n"); }
  • Comment on Re^5: Building an array of hashes, and then sorting keys with each hash
  • Download Code

Replies are listed 'Best First'.
Re^6: Building an array of hashes, and then sorting keys with each hash
by odegbon (Initiate) on Jan 03, 2010 at 22:19 UTC
    Hi,

    I have run the code in your last post and it doesn't give any output or error messages in the end. But when I put a "print" statement after the 6th line, it did print the IDs.

    It seems the part of the code after that line is missing something and I have been trying to figure it out.
      It's impossible for it to reach line 6 and print nothing.
        did you try running it? The only output I see here is the list of IDs and thats when you print at about the 6th line