| |
|
|
Jörg Sellmeyer | Dann hab ich auch gleich mal ne Frage zu den Hash-Arrays. Irgendwie wollen die sich mir noch nicht so recht erschließen.
cls
declare string key, value
declare hash person[]
Randomize
WhileLoop 3
key = Format$("0000",Rnd(1000)) + " " + Str$(&Loop)]
print key
person[key] = "Eintrag " + Str$(&Loop)
person[key,"Sub1"] = "Text1 " + Str$(&Loop)
person[key,"Sub2"] = "Text2 " + Str$(&Loop)
person[key,"Sub3"] = "Text3 " + Str$(&Loop)
Wend
print
'ohne die Eingrenzung auf key bekomme ich 12 Ausgaben
'ich will aber nur 3 Ausgaben haben. Mit key kommen aber nur die Ausgaben des letzten Eintrags heraus
ForEach Person[key],key,value
Print key,value
Print SubStr$(key,1,"|")
EndFor
'hier bekomme ich die Werte jeweils 4x
ForEach Person[],key,value
'Print key,value
Print SubStr$(key,1,"|")
EndFor
'hier passiert garnichts...
Whileloop 0,2
Print person[]
Wend
WaitKey
Kann ich hier irgendwie nur die ersten Bezeichner auslesen? Also das, was per Zufall in das Array geschrieben wurde? Oder lese ich immer mit ForEach alles aus und nutze dann SubStr$(), um den ersten Wert zu ermitteln? Oder anders gefragt: kann ich den Wert des ersten Eintrages auslesen, ohne den Bezeichner zu kennen?
[OFFTOPIC] David, ich glaube, du musst ForEach mal noch in die Syntaxerkennung einpflegen... [/OFFTOPIC] |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 09.11.2015 ▲ |
|
|
|
|
RGH | Ich versuche, es mal zu erklären:
Du erzeugst im Hash-Array 12 Einträge, wobei jeweils 4 den gleichen ersten Schlüssel (key) haben und Nummer 2 bis 4 jeweils einen anderen zweiten Schlüssel bekommen.
Wenn Du nun im ersten FOREACH alle Eintrage mit dem letzten Wert von Key als ersten Schlüssel auflistest, bekommst Du natürlich die letzten vier Einträge des Arrays angezeigt.
Im zweiten FOREACH gibst Du keinen Schlüssel als Einschränkung an, also bekommst Du alle 12 Einträge angezeigt.
(Ach ja: Bei WHILIELOOP wäre vielleicht eine Fehlermeldung angebracht, da man ein komplettes Array nicht ausdrucken kann.)
Der Hauptzweck eines Hash-Arrays besteht eben darin, dass man nicht über eine Zahl (die Position im Array), sondern einen oder mehrere Schlüssel (auch Hash genannt) auf den Inhalt zugreift.
Ohne Weiteres kannst Du also zunächst nicht auf den ersten Eintrag zugreifen, ohne den Schlüssel zu kennen. Man kann sich aber eine kleine Schleife basteln, um den Eintrag Nr eines Hasharrays auszulesen:
Hier macht man sich den Umstand zu Nutze, dass die Systemvariable &loop auch bei FOREACH (und FOR) intern hochgezählt wird.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 09.11.2015 ▲ |
|
|
|
|
Jörg Sellmeyer | Danke, ich werd es mal testen. Kann es sein, dass du ein paar Doppelpunkte in dem Code vergessen hast?
Ah - es ist das, was ich auch verwenden wollte, in etwas anderer Form:
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 09.11.2015 ▲ |
|
|
|
|
Jörg Sellmeyer | Jetzt hab ich auch meinen Denkfehler gesehen.
So ist es ja viel sinnvoller:
|
|
|
| |
|
|