Maison >développement back-end >C++ >Comment puis-je récupérer efficacement un sous-ensemble aléatoire d'une collection à l'aide de LINQ ?

Comment puis-je récupérer efficacement un sous-ensemble aléatoire d'une collection à l'aide de LINQ ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-06 03:17:42510parcourir

How Can I Efficiently Retrieve a Random Subset of a Collection Using LINQ?

Récupérer efficacement une sous-collection aléatoire avec Shuffle

Le défi de récupérer un sous-ensemble aléatoire d'une collection est fréquemment rencontré en programmation. LINQ fournit des mécanismes polyvalents pour manipuler les collections de données, et les développeurs recherchent souvent des approches optimisées pour obtenir des sous-ensembles aléatoires.

Solution proposée : implémentation de Fisher-Yates-Durstenfeld Shuffle

Une solution optimale La méthode pour y parvenir consiste à utiliser le remaniement Fisher-Yates-Durstenfeld. Cette technique consiste à sélectionner de manière itérative un élément aléatoire de la collection source et à l'échanger avec le dernier élément non trié, garantissant que chaque élément a une chance égale d'être choisi.

Mise en œuvre via la méthode d'extension

Pour améliorer les fonctionnalités de LINQ, une méthode d'extension appelée Shuffle a été développée, qui intègre le shuffle Fisher-Yates-Durstenfeld. Cette méthode accepte une entrée IEnumerable et renvoie une séquence mélangée. De plus, il prend en charge la transmission d'une instance aléatoire pour la personnalisation.

L'implémentation implique la conversion de la collection source en liste, garantissant un accès aléatoire en temps constant. Les éléments sont ensuite échangés séquentiellement pour créer une permutation aléatoire.

Exemple d'utilisation

Pour utiliser la méthode d'extension Shuffle :

  1. Importez l'espace de noms où l'extension est définie.
  2. Appelez la méthode Shuffle sur votre source collection.
  3. Spécifiez éventuellement une instance aléatoire pour la personnalisation.
  4. Utilisez la séquence mélangée résultante si nécessaire.

Exemple de code

L'extrait de code fourni montre comment utiliser l'extension Shuffle pour obtenir une sous-collection mélangée de éléments spécifiés. taille :

// take n random items from yourCollection
var randomItems = yourCollection.Shuffle().Take(n);

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