in reply to RESOLVED - Associated lists to matrices - and accumalted integers

You probably want hashes instead of arrays. Here's how I would do it, assuming three integers per line:
my %data; while (<>) { my ($id1, $id2, $int) = split; $data{$id1}{$id2} = $int; }

Replies are listed 'Best First'.
Re^2: Associated lists to matrices - and accumalted integers
by jaybode (Initiate) on Nov 06, 2009 at 15:08 UTC
    Hi, thanks. Sorry, from that I still dont get how I can parse a file like this..
    id1 id2 int HAT KNIFE 1 HAT KNIFE 7 BALL KNIFE 3 CAT CLOTH 1 DOG CLOTH 2
    To produce a table like this (notice KNIFE and HAT total is 8). Its 2am here, and would love to get this down else my wife is going to kill be if Im stuck on this all weekend. So your help much appreciated, first time I have asked for help like this.
    CLOTH KNIFE BALL 0 3 HAT 0 8 DOG 1 0 CAT 1 2
      Change the second = in my code to +=.
        I think I am getting it now... I so dumb I was trying out a way to add them up in the matrix, when your simple solution is to add them up before! Whay didn't I think of that first!
        list ---- HAT KNIFE 1 HAT KNIFE 7 BALL KNIFE 3 CAT CLOTH 1 DOG CLOTH 2 code ---- my %matrix; while (<>) { my ($id1, $id2, $int) = split; $matrix{$id1}{$id2} += $int; } foreach $key1 (keys %matrix) { foreach $key2 (keys %{%matrix->{$key1}}) { print "\$matrix{$key1}{$key2} = $matrix{$key1}{$key2} +"; } print"\n"; + } output ------ $matrix{CAT}{CLOTH} = 1 $matrix{DOG}{CLOTH} = 2 $matrix{HAT}{KNIFE} = 8 $matrix{BALL}{KNIFE} = 3
        Last question please.. do you have a good code snippet to put it in the matrix afterwoods please?
        CLOTH KNIFE BALL 0 3 HAT 0 8 DOG 1 0 CAT 1 2