Heute stand ich vor der Aufgabe ein zwei-dimensionales Array, gefüllt mit Strings, zu mischen. Hintergrund: in dem Array stecken Fragen, die bei jedem Request in anderer Reihenfolge zurückgegeben werden sollten.
Nach kurzer Recherche fand ich einen passenden Algorithmus: den Fisher-Yates Shuffle. In erster Ausbaustufe eher für eindimensionale Arrays gedacht, habe ich es aber schnell adaptieren können. Natürlich in Go für meine kleine Go-API.
func (a *App) shuffle(bingo *[4][4]string) *[4][4]string {
for i := len(bingo) - 1; i > 0; i-- {
for j := len(bingo[i]) - 1; j > 0; j-- {
m := rand.Intn(i + 1)
n := rand.Intn(j + 1)
temp := bingo[i][j]
bingo[i][j] = bingo[m][n]
bingo[m][n] = temp
}
}
return bingo
}
Entgegen genommen wird ein Pointer auf ein String-Array mit jeweils vier Werten. Folglich werden die Werte dekrementell durchgetauscht und nach erfolgreichem Durchlauf zurückgegeben.
Das ganze Projekt findet sich übrigens in meinem GitHub Repository annabingo-backend.