Thread identische hash-schlüssel??? (12 answers)
Opened by supersucker at 2005-04-25 18:54

Dubu
 2005-04-26 01:35
#54212 #54212
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=supersucker,25.04.2005, 21:29]
pq,_
einfache gegenfrage: was erwartest du bei folgendem code?
$hash{key} = 23;
$hash{key} = 24;
print $hash{key};


hast ja recht, aber ich hatte das problem mittlerweile schon öfter das ich identische schlüssel gebraucht hätte ohne mir da erst ein komplexes speicherkonstrukt zu überlegen, kann mir nicht vorstellen das ich da der einzige bin....
[/quote]
Nein, aber Perl macht es recht einfach, beliebige Datenstrukturen aufzubauen. Wie schon genannt: siehe perldoc perldsc.

Quote
und bei obigem beispiel könnte sowas
wie
Quote
print $hash{key};

bei mehreren identischen schlüsseln auch eine liste zurückgeben (kann man ja je nach kontext vorher kucken ob man ne liste oder ein skalar zurückkriegt....)

ich persönlich fänds praktisch...

Ah, eine Liste! Was du hier suchst, ist also statt
Schluessel => skalarer Wert
ein
Schluessel => Listen-Wert

Das ist ganz einfach, denn die Liste bekommen wir, wenn der Hashwert eine Arrayreferenz ist:
Code: (dl )
1
2
3
push @{$hash{key}}, 23;
push @{$hash{key}}, 24;
print "@{$hash{key}}";

Hier wird fuer das push() von Perl automatisch eine Arrayreferenz in $hash{key} angelegt, damit ich diese mit @{...} dereferenzieren kann.

Ich kann auch alle Werte auf einmal zuweisen, indem ich gleich eine Referenz auf ein (anonymes) Array zuweise:
Code: (dl )
1
2
$hash{key} = [ 23, 24 ];
print "@{$hash{key}}";

Hier ist der Wert im Hash eine Referenz auf ein anonymes Array, das auf der rechten Seite des Gleichheitszeichens steht, in eckigen Klammern.

Man kann es natuerlich auch gleich dereferenziert schreiben, dann stehen links und rechts der Zuweisung jeweils Arrays und keine Referenzen (hier wird also der Inhalt eines Arrays in ein anderes kopiert!):
Code: (dl )
1
2
@{$hash{key}} = ( 23, 24 );
print "@{$hash{key}}";


Also: Speichere einfach fuer alle Schluessel Arrayreferenzen als Werte, dann koennen alle zu einem Schluessel gehoerenden Zahlen in dieses Array gespeichert werden.

View full thread identische hash-schlüssel???