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

Comment sélectionner efficacement les éléments du tableau de manière aléatoire sans répétition ?

Susan Sarandon
Libérer: 2024-10-31 03:54:01
original
681 Les gens l'ont consulté

How to Efficiently Select Array Items Randomly Without Repetition?

Sélectionner efficacement les éléments d'un tableau de manière aléatoire et sans répétition

Vous avez conçu une fonction qui sélectionne aléatoirement les éléments d'un tableau, garantissant que les sélections récentes ne sont pas répétées. Bien que la solution actuelle fonctionne efficacement, vous avez des inquiétudes quant à son efficacité et si elle pourrait conduire à un bouclage excessif. Explorons une approche plus efficace.

1. Considérations sur la récursion

Oui, votre fonction ChooseName() peut être considérée comme récursive car elle s'appelle jusqu'à ce qu'elle trouve un nom unique. La récursivité peut être utile pour certains problèmes, mais il est important d'être conscient de l'utilisation de la pile et du potentiel de profondeur excessive.

2. Une solution efficace

Pour répondre aux problèmes d'efficacité, nous pouvons adopter une stratégie différente. Au lieu de compter sur la récursion et la boucle jusqu'à ce qu'un nom unique soit trouvé, nous pouvons créer une copie du tableau d'origine et sélectionner aléatoirement des éléments de la copie jusqu'à ce que tous les éléments soient sélectionnés. Une fois tous les éléments épuisés, nous réinitialisons la copie à son état d'origine.

Voici une implémentation JavaScript de 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']);
console.log(chooser()); // => "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.</code>
Copier après la connexion

Cette approche utilise la méthode array slice() de JavaScript pour créer une copie superficielle du tableau d'origine. Il sélectionne ensuite à plusieurs reprises des éléments aléatoires de la copie et les supprime de la copie, imitant efficacement une sélection aléatoire sans répétition jusqu'à ce que tous les éléments soient épuisés. Une fois tous les éléments sélectionnés, la copie est réinitialisée, permettant à la sélection aléatoire de recommencer.

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!