qw(a b c d);
a => [b], b => [c], c => [d], d => []
1 2 3
my @list=qw(a b c d); my %hash; @hash{@list}=map{defined$_?[$_]:[]}(@list[1..$#list],undef);
1 2
my @list=qw(a b c d); my %hash=map{$list[$_] => exists$list[$_+1]?[$list[$_+1]]:[]}(0..$#list);
2011-04-10T20:36:51 rostigegeben ist ein array
damit soll nun ein hash erzeugt werden, wo jedes Arrayelement auf den Nachfolger zeigtCode (perl): (dl )qw(a b c d);
1 2 3 4 5 6 7 8 9 10
my @array2 = @array; # @array: a => b, c => d shift @array2; # @array2: b => c, d => e # beide Arrays sollen eine gradzahlige Anzahl von Elementen haben => eines muss um 1 erweitert werden if (@array % 2) { push @array, undef; } else { push @array2, undef; } my %hash = (@array,@array2); # und fertig ist der Hash
2011-04-10T20:36:51 rostiDa zeigt jedes Element auf ein anonymes Array mit seinem Nachfolger als einzigem Element. Das leistet mein Code nicht.Code (perl): (dl )a => [b], b => [c], c => [d], d => []
1 2 3 4 5 6 7
use 5.010; # fuer //=, kann man aber auch vermeiden wenn man will my @a = qw(a b c d e); my %h; for (0..($#a-1)) { push @{$h{$a[$_]}}, $a[$_+1]; } $h{$a[-1]} //= [];