Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5926[/thread]

Arrayreferenzen in Hash: Arrayreferenzen in Hash



<< >> 7 Einträge, 1 Seite
weismat
 2003-11-24 16:57
#72773 #72773
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich möchte in einem Hash für jeden Schlüssel alle möglichen Zielwerte in einem Array halten. Das Ganze soll mit einem Hash mit Referenzen auf ein Array machen.
Wie mache ich das am besten ? Der Code sieht ungefähr so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
for $line (@lines) {
$key=xxx;
$value=yyy;
if defined($hash{key} {
#add value to array
} else {
$hash{key}=\[$value]
}
}
Ronnie
 2003-11-24 17:07
#72774 #72774
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Vor kurzem hatten wir hier mal was ähnliches, das Beispiel habe ich noch:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use warnings;
use strict;

my $daten;
my @tables = qw(Tabelle1.Spalte1 Tabelle1.Spalte2 Tabelle1.Spalte3
Tabelle2.Spalte1 Tabelle2.Spalte2 Tabelle2.Spalte3
Tabelle3.Spalte1);

for (@tables) {
my ($a, $b) = split(/\./, $_);
push @{$daten->{$a}}, $b;
}

for (keys (%$daten)) {
print "Groesse des Arrays für $_: ", scalar(@{$daten->{$_}}), "\n";
print $_,"\n";
print "--", $_, "\n" for (@{$daten->{$_}});
}

exit();
Crian
 2003-11-25 12:21
#72775 #72775
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=weismat,24.11.2003, 15:57]Ich möchte in einem Hash für jeden Schlüssel alle möglichen Zielwerte in einem Array halten. Das Ganze soll mit einem Hash mit Referenzen auf ein Array machen.
Wie mache ich das am besten ? Der Code sieht ungefähr so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
for $line (@lines) {
 $key=xxx;
 $value=yyy;
 if defined($hash{key} {
   #add value to array
 } else {
   $hash{key}=\[$value]
 }
}
[/quote]
Statt if-else kannst Du einfach

Code: (dl )
push $hash{$key}, $value;


schreiben, egal ob es da schon ein anonymes Array gibt oder nicht. (Danke an pq, die mir diesen Sachverhalt gerade neulich erst im Bewustsein verankert hat.) Der Punkt ist, dass das push Array-Kontext erzwingt, wenn kein anonymes Array im Wert ist, wird halt eins angelegt und mit dem Wert gefüllt.\n\n

<!--EDIT|Crian|1070015586-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2003-11-25 13:20
#72776 #72776
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
dann aber lieber
push @{ $hash{key} }, $value
verwenden =)
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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2003-11-28 12:33
#72777 #72777
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Hast Du nicht neulich geasgt, ein

Code: (dl )
push $hash{$key}, $value;


würde es auch tun ???
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2003-11-28 14:21
#72778 #72778
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Crian,28.11.2003, 11:33]Hast Du nicht neulich geasgt, ein

Code: (dl )
push $hash{$key}, $value;


würde es auch tun ???[/quote]
nein, daran würde ich mich erinnern =)
Code: (dl )
1
2
3
$ perl -wle'push $hash{key}, 23;'
Type of arg 1 to push must be array (not hash element) at -e line 2, near "23;"
Execution of -e aborted due to compilation errors.
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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2003-11-28 14:50
#72779 #72779
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ok, dann vergess ich das besser schnell wieder :)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 7 Einträge, 1 Seite



View all threads created 2003-11-24 16:57.