in reply to Re: Using Map to Create AoA
in thread Using Map to Create AoA

You have to make the best design decision "one truth is only stored once"
Thanks for the very useful advice pg.

My code above is just a small portion of a larger program I have. In this case I have to keep the index,
cause I need to process the array, which will loose its order later. Subsequently I need to 'remember'
those position to be able to callback certain value.

You are welcome to see my recent postings and especially this, related and similar to this problems.

---
neversaint and everlastingly indebted.......

Replies are listed 'Best First'.
Re^3: Using Map to Create AoA
by Tanktalus (Canon) on Oct 16, 2005 at 16:21 UTC

    Personally, I'd do this using an AOH. That keeps the data separate from the index, allowing the data to change format later without having to change other code (yes, you can use the -1 index, but all you have to do is use '3' as your index once to get confounded by later changes), and also allowing easy access to the original data without having to play with it:

    #!/usr/bin/perl -w use strict; my $arr = ['A -4 C','C -4 B','B -4 A','A -2 C','C -3 B']; my @a = do { my $idx = 0; map { { data => [ split ' ', $_ ], idx => $idx++, } }@$arr }; use Data::Dumper; print Dumper(\@a);
    This gives: If you really want it in a single AoA, then change the map like this:
    my @a = do { my $idx = 0; map { [ (split ' ', $_), $idx++ ], }@$arr };
    HTH

Re^3: Using Map to Create AoA
by pg (Canon) on Oct 16, 2005 at 16:15 UTC

    If this is the case, then we do this:

    use Data::Dumper; use strict; use warnings; my $arr = ['A -4 C','C -4 B','B -4 A','A -2 C','C -3 B']; my @a = map {[split " ", $arr->[$_] . " $_"]} (0 .. @$arr - 1); print Dumper(\@a);

    Which gives:

    $VAR1 = [ [ 'A', '-4', 'C', '0' ], [ 'C', '-4', 'B', '1' ], [ 'B', '-4', 'A', '2' ], [ 'A', '-2', 'C', '3' ], [ 'C', '-3', 'B', '4' ] ];