Obtenez de l'élément aléatoire de hashset?
Im en utilisant le morceau de code suivant pour charger mon fichier texte dans un hashset.
HashSet<string> hashs = new HashSet<string>(File.ReadLines("textFile.txt"));
Me demandais si il n'y a aucun moyen facile d'obtenir une ligne aléatoire?
Permet asume la textFile.txt contient 10 lignes, je tiens à rendre aléatoire et de saisir l'un de ces lignes existantes.
Qu'avez-vous essayé? Avez-vous essayé d'utiliser le Système.Classe aléatoires pour générer un nombre aléatoire entre 0 < nombre de lignes> et ensuite référence à cet élément par son indice? Ce sont toutes les tâches déjà documenté à la bibliothèque MSDN. mattgemmell.com/2008/12/08/what-have-you-tried
OriginalL'auteur user1213488 | 2012-05-18
Vous devez vous connecter pour publier un commentaire.
Tout à fait inefficace performance sage. Pas que je sache une meilleure façon, mais juste pour dire.
OriginalL'auteur Greg Bahm
une réponse simple comme acceptée est possible, sans que l'énumération de l'ensemble de la matrice à chaque fois:
Si hashsets éléments de changement dans un environnement multithread, ce qui peut revenir InvalidOperationException (Collection a été modifiée; opération d'énumération peut pas s'exécuter.) Ceci peut être évité en utilisant un verrou(objet) sur l' .ElementAt ligne ou .ToArray() le hashset et de les stocker en tant que nouvelle variable à utiliser pour la rand Comte ET de la pour la .ElementAt mais cela peut ne pas être efficace en terme de mémoire
OriginalL'auteur katbyte
Vous pouvez générer un nombre aléatoire entre 0 et la taille de l'ensemble, puis itérer à travers la mise en place jusqu'à ce que vous atteignez l'élément dont l'indice est le même que le nombre généré. Ensuite, sélectionnez cet élément en tant qu'élément aléatoire
1. Google "Du Système.Au hasard". 2. Regardez déjà fourni documentaiton et des exemples de code disponible sur le web. 3. Apprendre, plutôt que d'utiliser un copier/coller de la réponse. (Je suppose que aujourd'hui est un de mes "jerk" de jours).
OriginalL'auteur Attila
Ou peut-être un plus de solution générale pour toute énumérable
ElementAt
va jeter l'exception de vide de la collection.Si ElementAt jette, que Elementauhasard devrait également lancer la même exception. Il devrait y avoir un RandomElementOrDefault dans ce cas
OriginalL'auteur Vasea