in reply to Have hash of arrays. Want to test if variable is a member of any of the arrays
Hello batrams,
On each iteration you push the contents of the next array onto @newArr, but this array is never cleared, so by the end of the while loop you are greping through every element in every array within %HoA! It’s not surprising that this is very slow!
But I don’t understand why you need to construct the array at all. The following should be all you need:
#! perl use strict; use warnings; my %HoA = ( no1 => [ 'c', 'd' ], yes1 => [ 'X' ], no2 => [ 'e', 'e', 'f' ], yes2 => [ 'a', 'X', 'b' ], ); my $a = 'X'; for my $key (keys %HoA) { print "Element '$a' found, key = $key\n" if grep {$_ eq $a} @{ $Ho +A{$key} }; }
Output:
13:00 >perl 1095_SoPW.pl Element 'X' found, key = yes2 Element 'X' found, key = yes1 13:12 >
If this is still too slow, you can replace the call to grep with something more idiomatic: see How can I tell whether a certain element is contained in a list or array?, especially the first function in the core module List::Util.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
|
|---|