Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Array vs. Hash for sparsely integer-indexed data

by blue_cowdawg (Monsignor)
on Jan 25, 2013 at 19:36 UTC ( #1015395=note: print w/ replies, xml ) Need Help??


in reply to Array vs. Hash for sparsely integer-indexed data

      My perl program frequently needs to retrieve a cached set of data that is indexed by a positive but sparsely populated set of integers.

By the way it's Perl. Lower case perl is the command. Oh... never mind.

Based on what you said I'd go with a hash. If you really want to implement a sparse array you could to this:

package IndexedSparseArry; sub new { shift; my $self={ array => [ ] }; bless $self,"IndexedSparseArray"; } sub insert { my ($self,$index,$data)=@_; my @work = @{$self->{array}}; if ( $#work == -1 ) { # Nothing there yet. push @work,{index => $index, data => $data}; } else { my $i=0; # not to be confused with index. while ( ($i < $#work) && ($work[$i]->{index} < $index)){ $i++ } if ( $i == $#work ) { if ($work[$1] < $index ) { push @work,{index => index, data => $data); } else { $work[$i+1]=$work[$i]; $work[$i] = { index => $index, data=>$data}; } } else { my $j = $#work + 1; while ($j > $i){ $work[$j] = $work[$j-1]; $j--; } $work[$i] = { index => $index, data => $data }; $self->{array} = [@work]; } 1;
Save that file to IndexedSparseArray.pm and in your main program:
use strict; use warnings; use IndexedSparseArray; my $repo = IndexedSparseArray->new(); while (<i am reading in data >){ | handwaving $repo->insert($index,$data); } | etc.
Big Caveat: I didn't test this and I was interrupted a bunch of times. This should work, but...

I think I've given you something to chew on, hope it helps.


Peter L. Berghold -- Unix Professional
Peter -at- Berghold -dot- Net; AOL IM redcowdawg Yahoo IM: blue_cowdawg


Comment on Re: Array vs. Hash for sparsely integer-indexed data
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1015395]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (5)
As of 2015-07-05 23:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (68 votes), past polls