Maison > Article > interface Web > Comment pouvons-nous sélectionner efficacement des éléments de tableau aléatoires sans répétition ?
Sélection aléatoire efficace des éléments du tableau sans répétition
Dans cet article, nous explorons un problème rencontré par les utilisateurs à la recherche d'une méthode efficace de sélection aléatoire éléments d'un tableau sans répétition. Le code fourni sélectionne efficacement les éléments mais introduit la possibilité d'une boucle infinie en raison de l'utilisation d'une fonction récursive.
Fonction récursive ?
La fonction ChooseName() peut être considéré comme récursif car il se réfère à lui-même dans sa définition. La condition de terminaison est la découverte d'un élément unique, où unique est défini sur false, rompant la boucle et recommençant l'appel de fonction.
Améliorer l'efficacité
Pour améliorer efficacité, nous considérons une approche alternative suggérée par le commentateur @YuriyGalanter. Au lieu de compter sur une fonction récursive, nous pouvons sélectionner aléatoirement des éléments du tableau et les stocker dans un tableau temporaire. Une fois tous les éléments sélectionnés, nous réinitialisons le tableau temporaire et poursuivons le processus de sélection aléatoire.
Mise en œuvre
La mise en œuvre ci-dessous intègre cette approche :
<code class="javascript">function randomNoRepeats(array) { var copy = array.slice(0); return function() { if (copy.length < 1) { copy = array.slice(0); } var index = Math.floor(Math.random() * copy.length); var item = copy[index]; copy.splice(index, 1); return item; }; } var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']); chooser(); // => "Bar" chooser(); // => "Foo" chooser(); // => "Gah" chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>
En utilisant cette fonction, les éléments peuvent être sélectionnés au hasard sans possibilité de boucle infinie tout en évitant le problème de répétition.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!