Randomisieren von Elementen in einem Array?

8

Ich habe eine Website für eine befreundete Künstlerin erstellt, und sie möchte, dass das Layout gleich bleibt, aber sie möchte auch, dass neue Gemälde, die sie produziert hat, in das aktuelle Layout eingefügt werden. So habe ich 12 Thumbnails (thumb1 - thumb12) auf der Hauptgalerie Seite und 18 Bilder (img1 - img18) zu platzieren auch

Der Ansatz, an den ich gedacht habe, war, eine Anordnung aller Bilder zu erstellen, sie zufällig zu verteilen, dann einfach die ersten 12 abzukratzen und sie in die Daumenslots zu laden. Ein anderer Ansatz wäre, 12 Bilder zufällig aus dem Array auszuwählen. Im ersten Fall kann ich keine Möglichkeit finden, die Elemente eines Arrays zu randomisieren. Im letzteren Fall kann ich mich nicht damit abfinden, wie man Bilder mehr als einmal laden kann, außer mit einem zweiten Array, das sehr ineffizient und unheimlich wirkt.

Ich mache das alles übrigens in Javascript.

    
b. e. hollenbeck 02.05.2009, 01:34
quelle

4 Antworten

18

Ich habe das vor einer Weile geschrieben und es passt so gut, wonach Sie suchen. Ich glaube, es ist der Fisher-Yates Shuffle, auf den sich ojblass bezieht:

%Vor%

Beachten Sie, dass das Ändern von Array.prototype als schlechte Form angesehen werden kann. Möglicherweise möchten Sie dies als eigenständige Methode implementieren, die das Array als Argument verwendet. Wie auch immer, um es zu beenden:

%Vor%

Oder wenn Sie das Original nicht ändern möchten:

%Vor%     
Jeremy Huiskamp 02.05.2009, 01:41
quelle
6

Du solltest den Fisher-Yates Shuffle (auch als Knuth Shuffle bekannt) implementieren.

Sehen Sie sich die großartige Antwort an hier .

    
ojblass 02.05.2009 01:36
quelle
1

Ihr erster Ansatz würde funktionieren. Mischen Sie einfach die 18 Elemente und nehmen Sie die ersten 12.

    
Bill the Lizard 02.05.2009 01:38
quelle
1

Ich bin kürzlich selbst auf dieses Problem gestoßen. Der Beitrag hier half: Ссылка .

Beginnen Sie im Prinzip mit der Randomisierung Ihres Arrays:

%Vor%

Dies wird die Reihenfolge Ihrer 18 Elemente zufällig machen. Um nur die ersten 12 Elemente zu behalten, würden Sie einfach die letzten 6 löschen:

%Vor%     
StackOverflowed 28.02.2012 11:55
quelle