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

Einem Hash etwas hinzufügen!

Leser: 2


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
skontox
 2003-10-04 19:17
#60825 #60825
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Wie kann ich einem Hash etwas hinzufügen?
Push scheint hier ja leider nicht zu funktionieren.

In meinem Hash ist Name ein Identifikator.
Dort möchte ich nun weitere Namen hinzufügen.

Wenn ich einfach ne neue Zuweisung mache:

$inhalt{"Name"}=["neuer Wert"];

Wird der alte Wert überschrieben. Ich würde aber gerne etwas hinzufügen. So wie mit push beim Array!

Wie macht man soetwas am besten?

Gruß skontox\n\n

<!--EDIT|skontox|1065281186-->
skontox
 2003-10-04 19:28
#60826 #60826
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
So etwas blödes! Ich hab den Titel falsch benannt!
Das kann ich leider nicht Rückgängig machen! :-)

Also hier der Titel : Einem Hash etwas hinzufügen!

Ich glaub ich sitz schon wieder zulange vor dem Rechner! ;-)

Gruß skontox
format_c
 2003-10-04 19:41
#60827 #60827
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Du erstellst einen neuen Schlüssel indem du ihn einfach einmal aufrufst:
Code: (dl )
$hash{schluesses} = 'wert';

Edit: Titel umbenannt, Das nennt sich Autovivication

Gruß Alex\n\n

<!--EDIT|format_c|1065282232-->
skontox
 2003-10-04 19:46
#60828 #60828
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Ja das weiß ich ja, aber wie kann ich Ihm weitere Werte hinzufügen?

Beim Array geht das mit push! Aber wie geht das beim Hash?

####
Übrigens besten Dank an den Webmaster, der mir den Namen des Beiträges nun richtig benannt hat. :-)
Wer war das denn?
####

Gruß skontox
[HR]Doomrunner
 2003-10-04 19:47
#60829 #60829
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
ich glaube er will eine art 3-dimensionalem hash erstellen, oder? So nach der Art:

Code (perl): (dl )
1
2
$hash->{name1} = (1, 2, 3, 4, 5);
$hash->{name2} = (2, 3, 4, 5, 6);


dann kann man doch einfach einen Hash im Hash, oder einen Array im Hash erstellen. Also z.B. so:

Code (perl): (dl )
1
2
3
4
@name1 = (1, 2, 3, 4, 5);
@name2 = (2, 3, 4, 5, 6);
$hash->{name1} = @name1;
$hash->{name2} = @name2;


War das was du meintest?
format_c
 2003-10-04 19:56
#60830 #60830
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das war ich.
Achso. Als hast du in einem Hashschlüssel ein anonymes Array oder möchtest eines haben:
Meinst du dann soetwas:
Code: (dl )
1
2
3
for (@irgendwas) {
push @{$hash{schluessel}},$_;
}


Gruß Alex
skontox
 2003-10-04 19:58
#60831 #60831
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Vielleicht drücke ich mich heute nicht so richtig aus.
Ich probier es nochmal:
Ich erzeuge in einer Schleife dynamisch die Inhalte von einem Hash. Dabei muß ich dem Hash unter "Name" weitere Values sprich weitere Namen hinzufügen. Wenn ich einem Array etwas am Ende anhänge mache ich das mit push.
Das geht hier leider nicht. Ich hatte soetwas probiert

push $inhalt{"Name"}, "Jäger";

Und das was Ihr mir erzählt habt klappt nur beim ersten Erstellen. dort werden die Inhalte mehrfach angegeben.

$inhalt{"Name"}=["Schmidt","Meyer","Gustav"];
da ich den Hash allerdings dynamisch weiter füllen möchte, brauche ich eine Funktion die mir zu $inhalt{"Name"} weiter Namen hinzufügt. Soetwas wie push für Arrays. Ich hoffe ich hab das jetzt etwas verständlicher Beschrieben.

:-)
Gruß skontox
format_c
 2003-10-04 20:06
#60832 #60832
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Siehe mein Beitrag über deinem letzten. Da ist die Lösung. Ich weis dass die funktioniert, da ich auch viel mit solch verschachtelten Datenstrukturen arbeite.

Gruß Alex
skontox
 2003-10-04 20:10
#60833 #60833
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Ja, das ist richtig! Super genau soetwas habe ich gesucht!
Leider warst Du etwas schneller beim Posten! :-)

Und nochmal schönen Dank für die Namensänderung dieses Beitrags!

Nun kann ich wieder weiter Proggen!
Da hing ich eben leider etwas fest.
Aber Ihr habt mir ja auf die Sprünge geholfen.

Gruß skontox
Strat
 2003-10-04 20:42
#60834 #60834
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein Hashwert muss ein skalarer Wert sein, d.h. entweder undef, eine Zahl, eine Zeichenkette oder auch eine Referenz.
Damit ein Hashwert mehrere Werte aufnehmen kann, muss man z.B. als Hashwert eine Referenz auf eine Liste verwenden.
Code: (dl )
1
2
3
4
5
6
7
8
my @liste = 1..5;
my %hash = (
key1 => [ 1,2,3,4,5],
key2 => \@liste,
);

push (@{ $hash{key1} }, 6,7,8);
$hash{key1}->[3] = 30;
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2003-10-04 19:17.