J'utilise C# 3.5
et j'utilise actuellement Linq
pour obtenir tous les utilisateurs d'une table d'utilisateurs et les mettre dans une liste.
Maintenant, je voudrais renvoyer un utilisateur aléatoire de cette liste. Quelle est la meilleure façon de procéder?
Comme ça:
var Rand = new Random();
var user = users[Rand.Next(users.Count)];
Utilisez ElementAt
:
var Rand = new Random();
var user = users.ElementAt( Rand.Next( users.Count() ) );
Pourquoi ne pas créer un assistant générique et/ou une extension?!
namespace My.Core.Extensions
{
public static class EnumerableHelper<E>
{
private static Random r;
static EnumerableHelper()
{
r = new Random();
}
public static T Random<T>(IEnumerable<T> input)
{
return input.ElementAt(r.Next(input.Count()));
}
}
public static class EnumerableExtensions
{
public static T Random<T>(this IEnumerable<T> input)
{
return EnumerableHelper<T>.Random(input);
}
}
}
L'utilisation serait:
var list = new List<int>() { 1, 2, 3, 4, 5 };
var output = list.Random();
pour Entity Framework ou Linq 2 Sql, peut utiliser cette méthode d'extension
public static T RandomElement<T>(this IQueryable<T> q, Expression<Func<T,bool>> e)
{
var r = new Random();
q = q.Where(e);
return q.Skip(r.Next(q.Count())).FirstOrDefault();
}
// persons.RandomElement(p=>p.Age > 18) return a random person who +18 years old
// persons.RandomElement(p=>true) return random person, you can write an overloaded version with no expression parameter
Que diriez-vous quelque chose comme ça?
var users = GetUsers();
var count = user.Count();
var Rand = new System.Random();
var randomUser = users.Skip(Rand.Next(count)).FirstOrDefault();
La classe Random
peut être utilisée pour générer des nombres pseudo-aléatoires. Utilisez-le pour générer un nombre aléatoire dans la plage d'indices valides dans votre tableau ou votre liste.
Random Rand = new Random();
var user = Users[Rand.Next(Users.Count)];
Si vous voulez voir plus d'exemples, j'ai créé plusieurs extensions LINQ à orientation aléatoire et les ai publiées dans l'article Étendre LINQ avec des opérations aléatoires .