Page 1 of 2
Ahnunglosigkeit ...
Posted: 10 Jul 2020, 08:24
by BoBo
... macht sich breit, zwischen meinen Schläfen.
Folgende Konstellation:
aaa
bbbbbbbbbb
ccc
1234567890
bbb
xxxxxxx
Möchte jetzt dieses in ein assoziatives array überführen ...
array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}
anschließend soll nach keys alphabetisch sortiert werden ...
so, das die finale ausgabe (nicht zwingend das array) wie folgt aussieht:
aaa
bbbbbbbbbb
bbb
xxxxxxx
ccc
1234567890
Die eigentliche frage, wie ermittle ich die
keys eines ass. arrays im nachhinein (ungeachtet ob es sinnvollere möglichkeiten im voraus gibt)??
Vermutlich die offensichtlichste methode der welt, doch ich bekomme aus der AHK hilfe für mich nichts nachvollziehbares extrahiert
Danke fürs Lesen
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 08:45
by gregster
Mit
for, würde ich sagen:
Code: Select all
array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}
for key, value in array
msgbox % "Key: " key " Value: " value
for key, value in array
str .= key "`n" value "`n"
msgbox % str
Oder verstehe ich die Frage falsch?
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 08:47
by Rohwedder
Hallo,
versuch mal:
Code: Select all
array := {aaa:"bbbbbbbbbb",ccc:"1234567890",bbb:"xxxxxxx"}
For key, value in array
MsgBox %key% = %value%
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 08:52
by gregster
Oder:
Code: Select all
array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}
enum := array._NewEnum()
While enum[k, v]
str .= k "`n" v "`n"
MsgBox % str
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 08:53
by BoBo
Ich hatte tatsächlich mit
For ... in angefangen, und aus geistiger Umnachtung auf
Loop gewechselt.
Manchmal komm ich mir vor wie ein Einbeiniger beim Arschtritt-contest
Danke
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 10:56
by effel
Darf ich fragen, warum die Ausgabe jetzt eine andere Sortierung hat? welche Zeile ist für die Sortierung zuständig?
Oder anders gefragt, wenn ich nun eine andere Sortierung brauche, wie ginge das?
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 15:49
by just me
In AHK 1.1 werden sowohl numerische als auch nicht numerische Schlüssel immer automatisch aufsteigend sortiert. Numerische Schlüssel in lückenlosen 'simple arrays' lassen sich auch mit der Loop Anweisung abgreifen. Generell ist aber bei assoziativen Arrays For das Mittel der Wahl.
Re: Ahnunglosigkeit ...
Posted: 10 Jul 2020, 16:20
by BoBo
effel wrote: ↑10 Jul 2020, 10:56
Darf ich fragen, warum die Ausgabe jetzt eine andere Sortierung hat?
Hier wurde lediglich das Ziel skizziert.
Welche Zeile ist für die Sortierung zuständig?
Noch keine, s.o.
Oder anders gefragt, wenn ich nun eine andere Sortierung brauche, wie ginge das?
Ich verwend(et)e AHK's Sort-Befehl
Hier noch (m)eine Lösung mit einer vorab-Sortierung der keys, zeitgleich zur Befüllung des arrays, und nachfolgender Abfrage des arrays zur Ausgabe.
Code: Select all
content =
(LTrim
blue
|<>*43$17.5VUHl07W14J27p2iGeQUXIo1hs0oU0V023U
green
|<>*47$8.400026Vy+mVCpzeGM+0ks62
red
|<>*53$11.0EUF020U7dAN902E3gX80QNe40W001kE
yellow
|<>*48$17.0/U8K3k43EU2+eABg09Y1dA0a817k1JU0UU
gray
|<>*51$17.00U0B00U01A0UMK0UMlU+XVgn14628I20I45o60U43A
white
|<>*134$17.zjzzzwzzbzxhTxyzzzzz1y6STA
black
|<>*134$17.zjzzzwzzbzxhTxyzzzzz1y6STA
)
newContent := "", keys := "", array := {} ; vars & an empty associative array/variablen- & array-deklaration
Loop, Parse, content, `r`n ; parse content for the number of lines/für die anzahl an keys ...
{ Mod(A_Index,2)!=0 ? (key := A_LoopField, keys .= A_LoopField "`n") ; keep 'keynames' and concatenate them for sorting/erstelle unsortierte 'key'-liste
: Mod(A_Index,2) =0 ? (array[key] := A_LoopField) ; add 'key and item/value' to assoc. array/befüllung des array mit 'key+werte'-paaren
: "" ; ...
}
Sort, keys ; well, sorting the keys/sortierung der 'key'-liste
Loop, Parse, keys, `n ; parse for the number of sorted keys/für die anzahl an keys ...
newContent .= A_LoopField "`n" array[A_LoopField] "`n" ; concatenate the sorted content/erstelle sortierte 'key'-liste
MsgBox % newContent ; ShowTime/Anzeige
Return
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 04:17
by haichen
Hi BoBo,
das Array ist schon so sortiert, wie du es mit deinem sort, keys erhälst.
Das ist wohl die Standardsortierung des assoz. Arrays.
Aber wenn man eine andere Sortierung will, z.B. sort, keys, r , dann wird es interessant.
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 04:40
by Rohwedder
eine andere Sortierung?
Versuch mal:
Code: Select all
array := {aaa:"bbbbbbbbbb",ccc:"1234567890",bbb:"xxxxxxx"}
For key, value in array
MsgBox %key% = %value%
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 04:46
by gregster
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 06:02
by haichen
Ich meine, dass man sich auch eine eigene .enum() basteln kann.
https://www.autohotkey.com/boards/viewtopic.php?f=7&t=7199
Ist aber für mich nicht verständlich..
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 08:35
by BoBo
haichen wrote: ↑11 Jul 2020, 04:17
Hi BoBo,
das Array ist schon so sortiert, wie du es mit deinem
sort, keys erhälst.
Das ist wohl die Standardsortierung des assoz. Arrays.
Aber wenn man eine andere Sortierung will, z.B.
sort, keys, r , dann wird es interessant.
Das habe ich im nachhinein auch just-me's statement entnommen ...
"In AHK 1.1 werden sowohl numerische als auch nicht numerische Schlüssel immer automatisch aufsteigend sortiert"
Als laie wundert man/frau sich. Da pustet man werte unsortiert ins array. Denkt die liegen dann dort in genau dieser (un)sortierung.
Darauf fängt man/frau an umständlichste sortiermethoden zu verbuxeln. Und am ende reicht mal wieder der in der AHK-hilfe überlesene einzeiler.
Menno
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 10:57
by Rohwedder
@BoBo
Und was passiert hier?
Code: Select all
vorwärts := {aaa:"bbbbbbbbbb",bbb:"xxxxxxx",ccc:"1234567890"}
For key, value in vorwärts
rückwärts .= key "`t" value "`n"
MsgBox,, rückwärts,% rückwärts
Das Leben wird vorwärts gelebt und rückwärts verstanden.
Re: Ahnunglosigkeit ...
Posted: 11 Jul 2020, 14:58
by Frosti
Hey, Bobo Deine Ahnungslosigkeit hat ein massives Interesse erzeugt! 5902 mal wurde dieser Thread in etwas über 24h aufgerufen. Ich wäre der erste mit einer Antwort gewesen, habe es aber lieber gelassen.
Re: Ahnunglosigkeit ...
Posted: 12 Jul 2020, 01:11
by BoBo
@Frosti Mit ner Bild-Zeitung-Überschrift ist der Leserpool eben gleich viel größer als mit einer fürs
Spektrum der Wissenschaft
Und dann gibts da ja auch noch den Dunning-Kruger-Effekt
...
Re: Ahnunglosigkeit ...
Posted: 12 Jul 2020, 02:52
by haichen
Hi Rohwedder,
hab das erst jetzt richtig gelesen. Tatsächlich wird das array rückwärts ausgegeben. Aber dann so etwas:
Code: Select all
vorwaerts := {aaa:"bbbbbbbbbb",bbb:"xxxxxxx",ccc:"c1234567890"}
For key, value in vorwaerts
rueckwaerts .= key "=" value "`n"
MsgBox,, rueckwaerts,% "For-loop:`n" rueckwaerts "`nEinzelwerte:`nvorwaerts[aaa]: " vorwaerts[aaa] "`nvorwaerts[''aaa'']: " vorwaerts["aaa"] "`nvorwaerts.aaa: " vorwaerts.aaa "`n`nvorwaerts[bbb]: " vorwaerts[bbb] "`nvorwaerts[''bbb'']: " vorwaerts["bbb"] "`nvorwaerts.bbb: " vorwaerts.bbb "`n`nvorwaerts[ccc]: " vorwaerts[ccc] "`nvorwaerts[''ccc'']: " vorwaerts["ccc"] "`nvorwaerts.ccc: " vorwaerts.ccc
/*
For-loop:
ccc=c1234567890
?bbb=xxxxxxx
??aaa=bbbbbbbbbb
Einzelwerte:
vorwaerts[aaa]:
vorwaerts[''aaa'']:
vorwaerts.aaa:
vorwaerts[bbb]:
vorwaerts[''bbb'']:
vorwaerts.bbb:
vorwaerts[ccc]:
vorwaerts[''ccc'']: c1234567890
vorwaerts.ccc: c1234567890
*/
array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}
MsgBox, % "`nEinzelwerte:`narray[aaa]: " array[aaa] "`narray[''aaa'']: " array["aaa"] "`narray.aaa: " array.aaa "`n`narray[bbb]: " array[bbb] "`narray[''bbb'']: " array["bbb"] "`narray.bbb: " array.bbb "`n`narray[ccc]: " array[ccc] "`narray[''ccc'']: " array["ccc"] "`narray.ccc: " array.ccc
/* alles wie erwartet
Einzelwerte:
array[aaa]:
array[''aaa'']: bbbbbbbbbb
array.aaa: bbbbbbbbbb
array[bbb]:
array[''bbb'']: xxxxxxx
array.bbb: xxxxxxx
array[ccc]:
array[''ccc'']: 1234567890
array.ccc: 1234567890
*/
Sehe ich da einen Fehler in Autohotkey oder habe ich etwas übersehen.
Die Hilfe sagt: "Bei der {Key:Value}-Schreibweise muss der Key, sofern dieser nur aus Wortzeichen besteht, nicht in Anführungszeichen gesetzt werden. " Von daher eigentlich alles richtig. Oder?
Re: Ahnunglosigkeit ...
Posted: 12 Jul 2020, 03:07
by Rohwedder
Es ist alles richtig und Autohotkey keinen Fehler. In meinem Kode ist nur etwas versteckt.
Re: Ahnunglosigkeit ...
Posted: 12 Jul 2020, 03:26
by haichen
Ich habs gefunden: Irgendein unsichtbares Zeichen vor dem aaa und bbb. Da hast du mich aber ganz schön geärgert.
Re: Ahnunglosigkeit ...
Posted: 12 Jul 2020, 03:29
by just me
Ja: Unsichtbare Zeichen.
Ich nenne das 'Irreführung', weil
rückwärts tatsächlich
vorwärts entspricht.
Nichts für Ungut!