Ein Assoziative Array zufällig sortieren

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Ein Assoziative Array zufällig sortieren

Re: Ein Assoziative Array zufällig sortieren

Post by Nussbeisser » 19 Oct 2020, 17:12

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

Re: Ein Assoziative Array zufällig sortieren

Post by gregster » 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.

Re: Ein Assoziative Array zufällig sortieren

Post by gregster » 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]

Ein Assoziative Array zufällig sortieren

Post by Nussbeisser » 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"}

Top