Schrift
[thread]12126[/thread]

Array oder ähnliches?



<< >> 6 Einträge, 1 Seite
deepc
 2008-07-03 19:57
#111780 #111780
User since
2008-05-23
3 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,
ich habe folgendes vor.
Ich will aus einer Datei Zeilen einlesen und diese dann umsortiert ausgeben.
Dabei habe ich einen Key nach dem ich Sortieren. Dieser hat einen Value der ausgegeben werden soll.
Mein plan war bisher einen Array zu benutzen in dem Stiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
our % array;

while ( ...)
{
%array = ('key', 'value');
}
while ( sort )
{
print $array{'SORT_KEY'};
}


Aber außerhalb der While-Schleife enthält array anscheinend nur den letzen Eintrag.

Kann mir da jemand weiterhelfen. Ist das überhaupt der richtige Ansatz, oder gibt es da weit bessere Lösungen wie einen Array?
Vielen Dank für euere Hilfe,
DC

Edit betterworld: Schließendes code-Tag ergänzt
jd
 2008-07-03 20:15
#111782 #111782
User since
2008-06-27
6 Artikel
BenutzerIn
[default_avatar]
Hallo deepc,

um deinem Hash einen Wert zuzuweisen, musst du folgendes nutzen:
Code (perl): (dl )
$array{'key'} = 'value';


Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
my %daten;

while ( ... ) {
    $array{'key'} = 'value';
}

while ( sort ) {
    print $array{'SORT_KEY'};
}

Wenn du uns ein Beispiel für so eine Datei gibst und was genau du damit machen willst (wonach willst du sortieren? usw.) kann man dir sicher noch genauer helfen.
betterworld
 2008-07-03 21:28
#111787 #111787
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Nur eine Bemerkung nebenbei: Die Dinger mit dem Prozentzeichen heißen Hashes und nicht Arrays. Manchmal werden sie auch als "assoziative Arrays" bezeichnet, aber dann ist das "assoziativ" auf keinen Fall wegzulassen. Im Perl-Bereich wird aber fast nur der Begriff "Hash" benutzt.

Arrays hingegen sind die Dinger mit dem @At-Zeichen, sie haben keine Schluessel-Wert-Paare sondern einfach nur Werte.

Übrigens sieht while(sort) auch etwas seltsam aus... was soll das bewirken?
murphy
 2008-07-03 22:22
#111791 #111791
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
betterworld+2008-07-03 19:28:32--
[...] Arrays hingegen sind die Dinger mit dem @At-Zeichen, sie haben keine Schluessel-Wert-Paare sondern einfach nur Werte. [...]


Ich finde das irgendwie ungenau ausgedrückt: Arrays haben auch Schlüssel, diese sind aber immer numerisch.

Sowohl Arrays als auch Hashes sind eigentlich Funktionen, wobei bei den Arrays der Definitionsbereich stets eine Teilmenge der natürlichen Zahlen ist und bei den Hashes eine Teilmenge aller Zeichenketten. Funktionen von Teilmengen der natürlichen Zahlen auf andere Dinge lassen sich halt "zufällig" auch als Sequenzen mit einer kanonischen Ordnung auffassen und können recht effizient gespeichert werden ;-)

Bei Perl treten diese Analogien (leider) nicht so klar zu Tage, aber das heisst ja nicht, dass sie nicht existieren :-P
When C++ is your hammer, every problem looks like your thumb.
betterworld
 2008-07-03 23:49
#111793 #111793
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Hm, na gut, kann man schon so sagen. Ich wollte jetzt eigentlich auch hauptsaechlich behaupten, dass Arrays und Hashes halt in Perl unterschiedliche Konzepte sind.
Da man ja mit splice in Arrays auch in der Mitte Elemente hinzufuegen oder entfernen kann, unterscheiden sich die Indices von den Hash-Keys also nicht nur dadurch, dass sie numerisch sind, sondern auch dadurch, dass sie weniger Persistenz haben. Sie werden ja afaik auch nicht explizit abgespeichert in den Elementen.

Man muss natuerlich auch sagen, dass das, was in Perl als Arrays und Hashes bekannt ist, ausserhalb von Perl gewoehnlich anders bezeichnet wird.
Insbesondere ist "assoziatives Array" und "Hash" auch nicht wirklich das gleiche (im Gegensatz zu dem, was ich oben angedeutet habe). Das, was in Perl "Hash" heisst, ist eigentlich auch eine "Hashtable", und das ist eine mehrerer moeglichen Implementationen von assoziativen Arrays.
Aber ich glaube, es wird OT ;-)
KurtZ
 2008-07-04 19:54
#111857 #111857
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
betterworld+2008-07-03 21:49:45--
Hm, na gut, kann man schon so sagen. Ich wollte jetzt eigentlich auch hauptsaechlich behaupten, dass Arrays und Hashes halt in Perl unterschiedliche Konzepte sind.


Einigen wir uns darauf dass es die beiden Seiten des gleichen Trichters sind.
Nummerische Arrays kann man als spezialisierte Hashes begreifen, wodurch neue, schärfere Eigenschaften hinzukommen (Ordnung, Länge), so implementiert es beispielsweise JS [*]. Oder Hashes als verallgemeinerte Arrays begreifen und dass mit dem Wort "assoziativ" ausdrücken. Wie auch immer, sprachübergreifende Terminologie bleibt schwierig... [*] hier wird Struppi was einzuwenden haben...
TMTOWTDYOG (there's more than one way to dig your own grave)
<< >> 6 Einträge, 1 Seite



View all threads created 2008-07-03 19:57.