mi hanno una serie @number = [1,2,3,4,5,6,7,8,9]
Ora, voglio randomizzare il contenuto di matrice ... qualcosa come ad esempio: [5,3,2,6,7,1,8]
Per favore mi guida come procedere con esso.randomizzazione elementi dell'array
risposta
Utilizzare il metodo shuffle
...
irb(main):001:0> [1,2,3,4,5].shuffle
=> [3, 4, 2, 5, 1]
loop n times
i = random array index
j = random array index
swap elements i and j
end
Random non garantisce i risultati correttamente distribuiti. Pertanto, lo scambio di elementi con due indici casuali potrebbe fornire array con blocchi di sequenze invariate nel mezzo. Dovresti incrementare i da 0 a n e prendere a caso j per assicurarti che * tutti gli elementi vengano scambiati almeno una volta. –
Terribile. Even e odd 'n' dà due diversi set di permutazioni. È così triste, ma alcuni insegnanti insegnano agli studenti questo metodo ... Non farlo mai! – Nakilon
@Nakilon: Di cosa stai parlando? Perché è importante se n è pari o dispari? – RyanHennig
il comando shuffle
restituisce una versione randomizzato di un array
esempio:
[1,2,3].shuffle => [2,3,1]
Funziona su 1.8.7p249 –
e se vuoi randomizzare sul posto, puoi semplicemente scrivere '@ number.shuffle!' – Peter
Se si utilizza vecchia versione di rubino ... funzionerà
def randomize(array)
b = []
array.length.downto(1) { |n|
b.push array.delete_at(rand(n))
}
b
fine
a = [1,2,3,4,5] b = Randomize (a) b stampa
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9]
=> [5, 7, 3, 8, 9, 4, 2, 1, 6]
buono per 1.8.6 :) ma ora non aggiornato! – horseyguy
Duplicate http://stackoverflow.com/questions/1816378/how-to-randomly-sort-scramble-an-array-in-ruby – Nakilon
La funzione ipotetica ha eliminato 2 elementi dalla matrice. Anche 'shuffle' non può farlo, gg! – Nakilon