La matriz inschedulada significa interrumpir el orden de todos los elementos en la matriz.
Un método común es pasar una función al método de clasificación nativa de la matriz, que devuelve aleatoriamente 1 o -1 para lograr el propósito de organizar aleatoriamente elementos de matriz.
La copia del código es la siguiente:
arr.sort (función (a, b) {return math.random ()>. 5? -1: 1;});
Aunque este método es intuitivo, no es eficiente. Después de mi prueba, arruinó una serie de 10,000 elementos, y el tiempo que tomó fue de unos 35 ms (Firefox)
Siempre he tenido la excelente calidad de romper la cacerola para preguntar el final, por lo que encontré un método eficiente. Ver este texto original
La copia del código es la siguiente:
if (! Array.prototype.shuffle) {
Array.prototype.shuffle = function () {
para (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], this [i] = this [j], this [j] = x);
devolver esto;
};
}
arr.shuffle ();
Este método agrega una función a la matriz.prototype, llamada shuffle, pero el nombre no importa, lo importante es su eficiencia.
Tome la variedad de 10,000 elementos anteriores para probarlo. Solo se necesitan 7 u 8 milisegundos para completarlo en este método.
Aumente los elementos de matriz en 10 veces a 100,000 para las pruebas. El primer método de clasificación toma más de 500 ms, y el método Shuffle toma aproximadamente 40 ms. La diferencia es enorme.
Código de prueba completo:
La copia del código es la siguiente:
Var Count = 100000, arr = [];
para (var i = 0; i.5? -1: 1;});
Array.prototype.sort.call (arr, function (a, b) {return math.random ()>. 5? -1: 1;});
document.write (arr+'
');
var t1 = new Date (). GetTime ();
document.write (T1-T);
// Los siguientes métodos son más eficientes
if (! Array.prototype.shuffle) {
Array.prototype.shuffle = function () {
para (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], this [i] = this [j], this [j] = x);
devolver esto;
};
}
var t = nueva fecha (). gettime ();
arr.shuffle ();
document.write ('
'+arr+'
');
var t1 = new Date (). GetTime ();
document.write (T1-T);
Además, ¿has notado el bucle for en el código de Shuffle? ¡No tiene la segunda mitad! Es decir, solo hay para (..) pero no para el siguiente {..}, ¡así que puedes escribir de esta manera! ¡Y en realidad se ejecutó normalmente! Es tan curioso que tengo que ir al Blog Park para preguntar.