in reply to how to access hash key from the hash value when hash key is pointing to an array of hash values?
You have to visit every value in order to determine if a certain value exists. We're talking about a pair of nested loops since your data structure has two levels.
To find the first match:
my $gene_to_find = 'NP_012'; my $matching_taxon; TAXON: for my $taxon (keys %gg) { for my $gene ( @{ $gg{$taxon} } ) { if ($gene eq $gene_to_find) { $matching_taxon = $taxon; last TAXON; } } } if (defined($matching_taxon)) { print("Gene $gene_to_find found in taxon $matching_taxon.\n"); } else { print("Gene $gene_to_find not found in any taxon.\n"); }
To find the all matches:
my $gene_to_find = 'NP_012'; my @matching_taxons; for my $taxon (keys %gg) { for my $gene ( @{ $gg{$taxon} } ) { if ($gene eq $gene_to_find) { push @matching_taxons, $taxon; } } } if (@matching_taxons) { print("Gene $gene_to_find found in taxons @matching_taxons.\n"); } else { print("Gene $gene_to_find not found in any taxon.\n"); }
If you do many such searches between changes to %gg, you should build a hash of taxons by gene from your hash of genes by taxons.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: how to access hash key from the hash value when hash key is pointing to an array of hash values?
by AnomalousMonk (Archbishop) on Jan 29, 2010 at 22:52 UTC | |
by johngg (Canon) on Jan 29, 2010 at 23:20 UTC | |
by ikegami (Patriarch) on Jan 29, 2010 at 23:36 UTC | |
by AnomalousMonk (Archbishop) on Jan 29, 2010 at 23:38 UTC | |
|
Re^2: how to access hash key from the hash value when hash key is pointing to an array of hash values?
by umasuresh (Hermit) on Jan 30, 2010 at 12:54 UTC |