in reply to retrieve next avaiable element in sorted hash
Nothing is jumping out at me from CPAN, except maybe Tie::RangeHash, which you might find a way to use with what you're doing. If not, here's a solution (not particularly efficient though):
sub get_fuzzy { my ($k, $h) = @_; return $h->{$k} if exists $h->{$k}; for (sort keys %$h) { return $h->{$_} if $_ gt $k; # if keys are numeric, change "g +t" to ">" } return undef; # if key is higher than the highest } my %hash = (a=>1, c=>3, e=>5, g=>7, i=>9); print "|", join('|', map { get_fuzzy($_, \%h) } a..j), "|\n";
It's inefficient because it sorts all the hash keys each time there is a lookup and does a linear search through them. Also, I'm not sure what you want to do when looking up a value larger than the largest hash key. In this case, my code returns undef.
If you want efficiency, you may want to tie a class of your own that maintains the keys in sorted order, perhaps even indexed so you could do a binary search instead of a linear one.
-- Mike
--
XML::Simpler does not require XML::Parser or a SAX parser.
It does require File::Slurp.
-- grantm, perldoc XML::Simpler
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: retrieve next avaiable element in sorted hash
by Limbic~Region (Chancellor) on Oct 06, 2003 at 23:47 UTC | |
by demerphq (Chancellor) on Oct 06, 2003 at 23:54 UTC | |
by Limbic~Region (Chancellor) on Oct 06, 2003 at 23:57 UTC |