Maison > interface Web > js tutoriel > le corps du texte

Comment pouvons-nous sélectionner efficacement des éléments de tableau aléatoires sans répétition ?

Barbara Streisand
Libérer: 2024-10-31 10:41:40
original
168 Les gens l'ont consulté

How Can We Efficiently Select Random Array Items Without Repetition?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!