Beitrag von Pouraga (1396 Beiträge) am Sonntag, 9.März.2003, 18:01.
Wie durchläuft man ein Hash?
Ich habe mich gerade selbst gewundert, aber ich weiss echt nicht wie ich es anstellen soll.
Ich möchte eigendlich blos ein Hash in einer Schleife druchlaufen und in ihr Schlüssel und Wert in 2 Skalaren dann zur Verfügung haben.
Für Listen macht man da einfach ein foreach Schleife, aber was gibt es da um das selbe bei einem Hash zu erreichen?
Antworten
Beitrag von Pouraga (1396 Beiträge) am Sonntag, 9.März.2003, 18:31.
Re: Wie durchläuft man ein Hash?
Antworten
Beitrag von fb (420 Beiträge) am Sonntag, 9.März.2003, 20:28. WWW: nextfloor.de
Re: Wie durchläuft man ein Hash?
Antworten
Beitrag von Pouraga (1396 Beiträge) am Sonntag, 9.März.2003, 23:14.
Re: Wie durchläuft man ein Hash?
Ach, "each" ist das Zauberwort!
Jo, das ist sogar noch schöner. ;)
Danke dir!
Antworten
Beitrag von Sander (8133 Beiträge) am Sonntag, 9.März.2003, 23:36.
Re: Wie durchläuft man ein Hash?
>> Jo, das ist sogar noch schöner. ;)
ne, das ist alt, macht kaum noch einer so ;-)
foreach sieht einfach hübscher aus und zwar so:
foreach (keys %hash){
out "$_ => $hash{$_}<br>";
}
übr. geht das auch mit nur
Sander
Antworten
Beitrag von Pouraga (1396 Beiträge) am Dienstag, 11.März.2003, 22:58.
Re: Wie durchläuft man ein Hash?
Ist ja irgendwie witzig das ich damit eine Diskussion ausgelöst habe.
Also ich kann jetzt so direkt keinen Vorteil an der einen oder anderen Metode sehen. Ist wohl eher Geschmackssache.
Da ich recht neugierig bin habe auch mal die Ausführungszeit getestet. Nach 30000 durchläufen der einen oder anderen Metode konnte man noch keinen Unterschied in der Ausführungszeit sehen.
Wer selber schaun will:
------------------
<perl>
my %hash;
for(my $i = 1; $i <= 30000; $i++) {
$hash{$i} = $i*2;
}
out "Zeit nach hash erzeugung ".runtime."<BR>";
my $tempzeit = runtime;
if ($metode eq "foreach"){
out "<h1>foreach</h1>";
foreach (keys %hash){
out "$_ => $hash{$_}#";
}
}
out "<BR>Zeit nach foreach ".runtime."<BR>";
if ($metode eq "while"){
while (($k,$v) = each %hash) {
out "$k => $v#";
}
}
out "<BR>Zeit nach while ".runtime."<BR>";
$tempzeit = (runtime) - $tempzeit;
out "<h2>Zeit $tempzeit ms";
</perl>
<BR><BR>
<a href="?metode=foreach">foreach</a> <a href="?metode=while">while</a>
---------------------------------
Wenn man übriegens bei der foreach Version sich die Variablen erst noch in eine schönere wandelt dauert die logischerweise etwas länger. Dafür ist sie wenn man es nicht braucht kurzer und übersichtlicher.
Na wie dem auch sei, ich denke mal es ist Wurst, und ich werde mir eine aussuchen. ;) (ich sage aber nicht welche :P )
Antworten
Beitrag von Sander (8133 Beiträge) am Dienstag, 11.März.2003, 23:22.
Re: Wie durchläuft man ein Hash?
wenn du bei foreach $_ änderst, änderst du auch direkt im array den wert. hat aber nur einen sinn, wenn man ne liste und keinen hash verarbeitet, da wäre die liste ja nur temporär.
Antworten
Beitrag von Pouraga (1396 Beiträge) am Dienstag, 11.März.2003, 23:39.
Re: Wie durchläuft man ein Hash?
Ne so meinte ich das auch nicht, (oder du meinst das jetzt nicht so wie ich meine das das du das meinst. *g*)
Ich meinte wenn man jetzt in der Schleife nicht die Variablen
$k,$v oder $_ , $hash{$_} zu ansprechen möchte
sonder z.B. $bla und $blub
Dann währe es einmal so:
---------------------
while ( ($bla,$blub) = each %hash ) {
...
-------------------
und einmal so
--------------------
foreach $bla (keys %hash){
my $blub = $hash{$bla};
...
--------------------
Da ändert man doch jetzt nix am Hash. (oder?)
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 12.März.2003, 00:05.
Re: Wie durchläuft man ein Hash?
nene, keine hektik, wollte dir nur noch einen vorteil von foreach zeigen... hat nix mit den hashes zu tun.
Sander
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 12.März.2003, 14:59.
Re: Wie durchläuft man ein Hash?
Antworten