Maison  >  Article  >  interface Web  >  Comment puis-je sélectionner efficacement des éléments de tableau aléatoire sans répétitions ?

Comment puis-je sélectionner efficacement des éléments de tableau aléatoire sans répétitions ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 04:47:30327parcourir

How Can I Efficiently Select Random Array Items Without Repeats?

Comment sélectionner efficacement et aléatoirement un élément d'un tableau sans répétitions

Votre code crée un tableau de choix récents pour éviter les répétitions et appelle une fonction récursive nommé ChooseName() lorsqu'un élément sélectionné figure dans les choix récents. Cette approche garantit l'unicité mais peut conduire à une boucle infinie si la taille du tableau est limitée.

Est-ce une fonction récursive ?

Oui, ChooseName() s'appelle à retrouvez une sélection unique. La récursivité permet à la fonction de parcourir les éléments du tableau jusqu'à ce qu'elle en trouve un qui ne figure pas dans les choix récents.

Amélioration de l'efficacité

Pour éviter les boucles infinies, envisagez une approche alternative suggéré dans la réponse :

<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;
  };
}</code>

Cette fonction génère une copie du tableau d'origine et en choisit au hasard un élément. Une fois que tous les éléments sont utilisés, il crée une nouvelle copie du tableau d'origine, garantissant des sélections uniques même lorsque le tableau est épuisé.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn