Thread Array-Element kombinieren
(5 answers)
Opened by Hagen at 2010-07-14 08:53
also wenn du damit nicht im obfuscation contest gewinnen willst, würde ich einige sachen etwas lesbarer und perliger schreiben.
c-style-for-schleifen etwa finde ich viel zu umständlich. for my $i ($x .. $y) ist IMHO einfach schneller begreifbar. und du wiederholst mehrmals $data{'l'.($i+1)}. da würde ich den key in eine variable zwischenspeichern oder gleich die liste zwischenspeichern. 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 25 26 27 28 use strict; use warnings; my %data = ( l1 => ['x1', 'x2', 'x3'], l2 => ['y1', 'y2', 'y3', 'y4'], l3 => ['z1', 'z2', 'z3', 'z4', 'z5'], ); my @liste = (); for my $i (0 .. (keys %data) - 1) { my $key = 'l' . ($i+1); my $current = $data{$key}; print "Schleifendurchlauf '$i' ...\n"; if ($i == 0) { @liste = @$current } else { my @list_bak = @liste; @liste = (); for my $j (0 .. $#$current) { push @liste, map { "$_-$current->[$j]" } @list_bak; } } print Dumper \@liste; } es gibt auch noch perldoc -q permute, was z.b. Algorithm::Permute vorstellt, aber das passt hier nicht so richtig. lohnt sich aber, sich zu merken. Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: ![]() ![]() View full thread Array-Element kombinieren |