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

Array in Hash



<< >> 6 Einträge, 1 Seite
master
 2005-10-05 17:38
#58543 #58543
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Kann man Array und Hash relativ einfach kombinieren?

Code: (dl )
1
2
3
4
5
6
#Zuweisung
$adressen{'Peter'} = @daten;

#Ausgabe, array im hash druchlaufen
for($adressen{'Peter'})
{print "$_\n";}


Wichtig ist, dass die Liste wirklich im Hash steht.. also kein "Zeiger" auf eine Liste.. da ich später, elemente aus dem array ändern will.

Code: (dl )
$daten{'meier'}[1] = 'Hans';


im Notfall nehm ich ein mehrdimensionales Array... Hash wär aber besser.\n\n

<!--EDIT|master|1128519535-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2005-10-05 17:50
#58544 #58544
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
#Zuweisung
$adressen{'Peter'} = [@daten];

#Ausgabe, array im hash druchlaufen
for(@{$adressen{'Peter'}}){
print "$_\n";
}


Änderung:
Code: (dl )
1
2
3
print Dumper(\%adressen);
$adressen{Peter}->[2] = 'irgendwas anderes';
print Dumper(\%adressen);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-10-05 17:54
#58545 #58545
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Lesenswert:Wiki:perldoc perlreftut auf Deutsch
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2005-10-05 17:58
#58546 #58546
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein Wert eines Hashes muss ein skalarer wert sein, also String, Zeichenkette oder eben auch Referenz auf irgendwas.

Ich wuerde da einfach eine Arrayref speichern:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
$adressen{Peter} = \@daten;

if (ref($adressen{Peter} eq 'ARRAY') {
foreach (@{ $adressen{Peter} } ) {
print "$_\n";
}
} # if
else { # nur ein normaler string
print $adressen{Peter}, "\n";
} # else

wenn du z.B. die zweite adresse aendern willst, dann einfach:
Code: (dl )
$adressen{Peter}->[1] = $neueAdresse;


Wenn du da unbedingt einen string speichern willst, dann musst du die einzelnen adressen durch irgendein zeichen trennen; \n wuerde sich da vielleicht anbieten. Aber dann musst du es immer mit @adressen = split(/\n/, $adressen{Peter}) zerlegen bzw. mit $adressen{Peter} = join("\n", @adressen) wieder speichern... da wuerde ich die Loesung mit den Arrayreferenzen bevorzugen
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2005-10-05 18:05
#58547 #58547
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei Referenz auf ein Array muss man ein wenig aufpassen, wo das Array deklariert wird...

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

use strict;
use warnings;
use Data::Dumper;

my %hash;
my @array = qw(1 2);
$hash{eins} = \@array;
@array = qw(8 9);
$hash{zwei} = \@array;

print Dumper(\%hash);

my %hash2;
for(1..3){
my @ar = ($_,$_+1);
$hash2{$_} = \@ar;
}
print Dumper(\%hash2);


Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
~/entwicklung 51> perl arrayref.pl 
$VAR1 = {
'eins' => [
'8',
'9'
],
'zwei' => $VAR1->{'eins'}
};
$VAR1 = {
'1' => [
1,
2
],
'3' => [
3,
4
],
'2' => [
2,
3
]
};
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2005-10-05 18:14
#58548 #58548
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
[quote=renee,05.10.2005, 15:50]
Code: (dl )
1
2
3
4
5
6
7
#Zuweisung
$adressen{'Peter'} = [@daten];

#Ausgabe, array im hash druchlaufen
for(@{$adressen{'Peter'}}){
  print "$_\n";
}


Änderung:
Code: (dl )
1
2
3
print Dumper(\%adressen);
$adressen{Peter}->[2] = 'irgendwas anderes';
print Dumper(\%adressen);
[/quote]
Danke! Genau das hab ich gesucht!
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
<< >> 6 Einträge, 1 Seite



View all threads created 2005-10-05 17:38.