Ein Assoziative Array zufällig sortieren Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Nussbeisser
Posts: 45
Joined: 17 Jul 2019, 08:49

Ein Assoziative Array zufällig sortieren

18 Oct 2020, 15:31

Hallo,
gibt es eine Möglichkeit Assoziative Arrays zufällig zu sortieren?
Und wie finde ich die länge eines Assoziative Arrays, length und MaxIndex funktionieren nicht.
LG
zb.

Code: Select all

Bilder := {Bild1a: "Bild1a.jpg", Bild1b: "Bild1b.jpg", Bild2a: "Bild2a.jpg", Bild2b: "Bild2b.jpg", Bild3a: "Bild3a.jpg", Bild3b: "Bild3b.jpg", Bild4a: "Bild4a.jpg", Bild4b: "Bild4b.jpg", Bild5a: "Bild5a.jpg", Bild5b: "Bild5b.jpg", Bild6a: "Bild6a.jpg", Bild6b: "Bild6b.jpg"}
gregster
Posts: 5382
Joined: 30 Sep 2013, 06:48

Re: Ein Assoziative Array zufällig sortieren  Topic is solved

18 Oct 2020, 16:02

Anzahl der Elemente:

Code: Select all

msgbox % bilder.count()		; v1.1.29+

Das assoz. Objekt selber wird sich in dieser Form die Zufallsreihenfolge nicht merken können. Entweder erstellst du ein Hilfsobjekt/-array, das die Reihenfolge verwaltet - oder du erstellst aus den Elementen ein Scripting-Dictionary-COM-Objekt; das kann afaik die Reihenfolge der (ggf. zufälligen) Erstellung speichern... in beiden Fällen wirst du wahrscheinlich einmal durch alle Elemente loopen und dabei eine Zufallsfunktion ausführen müssen - es sei denn, du befüllst von Anfang an ein Dictionary in zufälliger Reihenfolge.

Ein Beispiel mit Hilfsarray:

Code: Select all

Bilder := {Bild1a: "Bild1a.jpg", Bild1b: "Bild1b.jpg", Bild2a: "Bild2a.jpg", Bild2b: "Bild2b.jpg", Bild3a: "Bild3a.jpg", Bild3b: "Bild3b.jpg", Bild4a: "Bild4a.jpg", Bild4b: "Bild4b.jpg", Bild5a: "Bild5a.jpg", Bild5b: "Bild5b.jpg", Bild6a: "Bild6a.jpg", Bild6b: "Bild6b.jpg"}

; erstelle Hilfs-Array mit zufälliger Reihenfolge
for key, value in Bilder 
	order .= key "`n"
order := RTrim(order, "`n")
Sort order, Random
order := StrSplit(order, "`n")

; überprüfe zufällige Reihenfolge
for idx, elem in order
	msgbox % Bilder[elem]
gregster
Posts: 5382
Joined: 30 Sep 2013, 06:48

Re: Ein Assoziative Array zufällig sortieren

18 Oct 2020, 16:16

Andererseits ist hier natürlich Redundanz vorhanden: Bild1a: "Bild1a.jpg" , die man nutzen/einsparen könnte.
Wenn du den Schlüssel durch eine Zahl oder einen anderweitig zufälligen Sortierungscode ersetzen könntest, dann würde ggf. ein einziges assoz. Array reichen:
{ 1: "Bild4b.jpg", 2: "Bild1a.jpg", 3: "Bild2b.jpg", ... }
Wenn das schon direkt bei der initialen Objektbefüllung passiert, kannst du dir ggf. zusätzliche Schritte sparen (natürlich nur, wenn du auf die bisherigen Schlüssel wirklich verzichten kannst).

Die Frage wäre, ob diese Redundanz immer auftritt - oder ob es auch andere Fälle gibt, wie Bild77a: "Bild1a.jpg", und ob du wiederholt neue Reihenfolgen erzeugen willst. Im letzteren Fall würd ich wahrscheinlich den Ansatz mit dem Hilfsarray (wie oben gezeigt) wählen.

Kurz gesagt: das optimale Verfahren für dich hängt davon ab, wie du die Daten/das Objekt nutzen willst.
Nussbeisser
Posts: 45
Joined: 17 Jul 2019, 08:49

Re: Ein Assoziative Array zufällig sortieren

19 Oct 2020, 17:12

Danke @gregster,
Scripting-Dictionary-COM-Objekt, war das zauberwort.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: LuckyJoe and 6 guests