Thread dynamisch mehrdimensionales Array (19 answers)
Opened by sebi85 at 2010-10-27 10:09

topeg
 2010-10-28 11:57
#142268 #142268
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Soweit ich das sehe, lässt sich die Konstruktion wie folgt vereinfachen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my %DATA_HASH;
for(my $i=0;$i<@FUNCTION_ARRAY;$i++)
{
  if($FUNCTION_ARRAY[$i]->gi() eq 'TestFunction')
  {
    my $temp_func = $FUNCTION_ARRAY[$i]->att('name');

    $i++ while($FUNCTION_ARRAY[$i]->gi() ne 'Parameter');
    my $temp_param = $FUNCTION_ARRAY[$i]->att('name');

    my $temp_pos=$i;
    $i++ while($FUNCTION_ARRAY[$i]->gi() ne 'ParameterValue');
    $temp_pos=$i-$temp_pos;

    $DATA_HASH{$temp_func}->{$temp_param}->{$pos}=$FUNCTION_ARRAY[$i]->att('value'));
  }
}


Da kommt dann so was raus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%DATA_HASH=(
  A => {
    param1 => {
      0 => "value2",
      5 => "value3",
      2 => "value4",
    },
  },
  B => {
    param1 => {
      5 => "value1",
    },
    param2 => {
      1 => "value1",
      0 => "value2",
      7 => "value3",
      5 => "value4",
    },
    param3 => {
      0 => "value1",
      1 => "value2",
    },
  },
);


Wenn es dir beim letzten Teil nur um eine eindeutige Zuordnung der werte geht kannst du auch so was machen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my %DATA_HASH;
for(my $i=0;$i<@FUNCTION_ARRAY;$i++)
{
  if($FUNCTION_ARRAY[$i]->gi() eq 'TestFunction')
  {
    my $temp_func = $FUNCTION_ARRAY[$i]->att('name');

    $i++ while($FUNCTION_ARRAY[$i]->gi() ne 'Parameter');
    my $temp_param = $FUNCTION_ARRAY[$i]->att('name');

    $i++ while($FUNCTION_ARRAY[$i]->gi() ne 'ParameterValue');
    push(@{$DATA_HASH{$temp_func}->{$temp_param}},$FUNCTION_ARRAY[$i]->att('value'));
  }
}

Last edited: 2010-10-28 12:03:44 +0200 (CEST)

View full thread dynamisch mehrdimensionales Array