Maison > Article > interface Web > Comment puis-je sélectionner efficacement des éléments aléatoires dans un tableau sans répétition, en particulier lorsque le tableau est constamment modifié ?
Introduction
La sélection aléatoire d'un élément dans un tableau sans répétition est une programmation courante tâche. Cependant, si le pool d'éléments est constamment modifié, garantir l'efficacité devient crucial.
Question
Un développeur a implémenté une fonction permettant de sélectionner aléatoirement un élément dans un tableau. tout en maintenant une liste de choix récents pour éviter les répétitions. Cependant, ils expriment des inquiétudes quant à son efficacité et demandent s'il existe une approche plus optimale.
Réponse
1. Clarification de la récursion
Le code fourni semble en effet être une fonction récursive. La récursivité implique une fonction qui s'appelle elle-même, ce qui peut conduire à des inefficacités dans certains scénarios.
2. Amélioration de l'efficacité
Pour améliorer l'efficacité, envisagez l'approche alternative suivante :
Mise en œuvre du code :
<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']);</code>
Explication :
Cette approche isole la logique de sélection aléatoire du code responsable de la gestion de l'ensemble des choix récents. En conséquence, l'efficacité est améliorée car la sélection aléatoire n'a lieu qu'une seule fois par exécution de la fonction de sélection.
En réinitialisant la copie chaque fois qu'elle est épuisée, la fonction garantit que tous les éléments ont une chance égale d'être sélectionnés. Cela élimine le problème potentiel de blocage du code dans une boucle infinie en essayant de trouver un nom « unique ».
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!