Schrift
[thread]7450[/thread]

hash's Verständnisproblem



<< >> 7 Einträge, 1 Seite
e-weder
 2005-11-08 17:29
#59903 #59903
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
Hallo erstmal.

Ich habe da ein kleines Problem mit hash's.
Ich habe da ein problem bei volgenden script!

Code: (dl )
1
2
3
4
5
6
7
@bubu = ('Baum','Titel','Arnold','Pferd');
%Test = ();
foreach (@bubu)
{
$Test{$_} = ',';
}
print %Test;


wenn ich dieses script ausführe und mir dann den hash ausgeben lasse, erscheint volgendes

print %Test ---> Titel,Baum,Arnold,Pferd,

Meine Frage: Warum ist der hash anders sortiert bzw. warum stehen die werte an anderen positionen, als ich sie eingelesen habe?????

wäre schön wen mir das mal bitte jemand erklären könnte.

danke\n\n

<!--EDIT|esskar|1131463914-->
Ronnie
 2005-11-08 17:42
#59904 #59904
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hashs haben keine Sortierung, da der Zugriff nicht sequentiel sondern über Schlüssel erfolgt.
esskar
 2005-11-08 17:44
#59905 #59905
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
erstmal:

Code: (dl )
1
2
use strict;
use warnings;


zum Problem: die Keys sind nicht sortiert, sondern über eine (Hash-)Funktion in einem Container untergebracht!
e-weder
 2005-11-08 17:45
#59906 #59906
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
jab ok das hab ich ja verstanden, aber es erklärt mir immer noch nicht warum es dann an anderen positionen steht.

gibt es irgenwie die möglichkeit mir die keys trotzdem so ausgeben zu lassen, wie ich sie eingelesen habe?\n\n

<!--EDIT|e-weder|1131464901-->
esskar
 2005-11-08 18:03
#59907 #59907
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nein, hast du wohl nicht! :)

Quote
Hashes werden intern in einer Datenstruktur gespeichert, die für Effizienz bei Schreib- und Lesezugriffen sorgt. Aufgrund dieser Tatsache ist die Reihenfolge der Schlüssel, wie sie beispielsweise von der Funktion keys geliefert wird, (scheinbar) mehr oder weniger zufällig und stimmt nur in den seltensten Fällen mit der Reihenfolge überein, in der Sie den Hash deklariert haben. Sie haben keine Möglichkeit, diese Reihenfolge zu verändern. Es hält Sie allerdings niemand davon ab, die Hash-Elemente in einer bestimmten Reihenfolge beispielsweise mit einer Schleife zu durchlaufen. So können Sie z.B. mit @sortierteSchluessel = sort keys %Daten die Schlüssel des Hashes %Daten alphabetisch sortieren und diese sortierte Liste von Schlüsseln dem Array @sortierteSchluessel zuweisen. So eine sortierte Liste von Schlüsseln können Sie anschließend (mit einer Schleife beispielsweise) benutzen, um die einzelnen Hash-Elemente in eben dieser sortierten Reihenfolge zu verarbeiten. Dabei können Sie wahlweise nach Schlüsseln oder nach Werten sortieren. Dazu müssen Sie allerdings ein paar Perl-Funktionen sowie eine Schleife anwenden.

http://de.selfhtml.org/perl/sprache/hashes.htm
Ronnie
 2005-11-08 18:16
#59908 #59908
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=e-weder,08.11.2005, 16:45]gibt es irgenwie die möglichkeit mir die keys trotzdem so ausgeben zu lassen, wie ich sie eingelesen habe?[/quote]
http://search.cpan.org/~gsar/Tie-IxHash-1.21/lib/T...

Sollte man aber nur mit gutem Grund tun - normale Hashes sind wohl deutlich schneller als diese zwangsweise geordneten.
e-weder
 2005-11-08 18:33
#59909 #59909
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
ok danke jetzt bin ich zufrieden gestellt!
<< >> 7 Einträge, 1 Seite



View all threads created 2005-11-08 17:29.