Hi all,

I could use some help with the following problem:

I have rows of data (coming in from DBI) looking like this:

Key1, Key2, Date_from, Date_to, Value

1, 1, 01-10-2002, 31-10-2002, value1
1, 1, 01-11-2002, 30-11-2002, value2
1, 2, 01-10-2002, 31-10-2002, value3
1, 2, 01-10-2002, 30-10-2002, value4
1, 2, 01-11-2002, 31-11-2002, value5
2, 2, 01-10-2002, 30-10-2002, value6
2, 2, 01-11-2002, 31-11-2002, value7

What I want to do is: Create a hash of an array of an array, with this format:

The keys of the hash are the first 2 fields and the array of array is the rest of the 
record.
Basically, what I want to do is aggravate on the first 2 fields.

So the hash looks like

$hash{1, 1} = reference to array of array 
([ 01-10-2002, 31-10-2002, value1],
 01-11-2002, 30-11-2002, value2])

$hash{1, 2} = reference to array of array 
([01-10-2002, 31-10-2002, value3]
 [01-10-2002, 30-10-2002, value4]
 [01-11-2002, 31-11-2002, value5])

etc

Ok, so far so good.

This is a code snippet:

my $old_key = undef;
my $key = undef;
my $ref_to_a = undef;

while (@values = $lcsr->fetchrow) {
        $key = shift @values;
        $key.= shift @values;
        
        push @$ref_to_a, [EMAIL PROTECTED];
        if ($old_key ne $key) {
                $hash{$key} = $ref_to_a;
                my $ref_to_a = undef;
        }
        $old_key = $key;
}


The problem is: the reference $ref_to_a is not new all the time.
The 2 dimensional array is growing all the time but I want a new 2 dimensional array 
for each hash key.

In other computer languages is is possible to do something like 'new' or 'malloc' and 
create a new reference
How do I make sure a new 2dim array is created for each new key value.

Thanks in advance.

PS I want this data structure as I want to be able to lookup data in date ranges.
So imagine: I want to find the data record in which this key falls: 1, 2, 15-11-2002
It should return value5 as that is within the date range and key.
The 2dim array is to implement a binary search as a straight forward hash wouldn't 
work.
But maybe my whole solution to the problem is wrong anyway, maybe there is a more 
clever way.
So feel free to comment on the algorithm as well






--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to