Listesinden
Şimdi rastgele bir kullanıcıyı bu listeden nasıl döndüreceğim, nasıl yapmalı? Bunun gibi
Listesinden
Şimdi rastgele bir kullanıcıyı bu listeden nasıl döndüreceğim, nasıl yapmalı? Bunun gibi
:
var rand = new Random();
var user = users[rand.Next(users.Count)];
Not: Gerçek kodda 'var rand = yeni Random();' başka bir yerde başlatılmalıdır, böylece yalnızca bir kez ekilebilir. Bu kod, hızlı bir şekilde art arda birden fazla kez çağrılırsa, "Random" in yeni örnekleri, aynı tohumu kullanarak sonlanabilir ve böylece "Next" (İleri) çağrılırken aynı değere dönülebilir. – Brian
Gerçekten de, bu rand, "statik" –
Nasıl böyle bir şey?
var users = GetUsers();
var count = user.Count();
var rand = new System.Random();
var randomUser = users.Skip(rand.Next(count)).FirstOrDefault();
olabilir. "IList
Oldukça doğru, ama soru cümlecik yolunda belirsizlik için çok yer var. – ilivewithian
Kullanım ElementAt
: Varlık Framework veya Linq 2 Sql için
var rand = new Random();
var user = users.ElementAt(rand.Next(users.Count()));
, genel bir yardımcı ve/veya uzantısı oluşturmak değil neden bu uzatma yöntemi
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
kullanabilirsiniz ?!
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);
}
}
}
Kullanım olacaktır: sahte-rasgele sayılar üretmek için
var list = new List<int>() { 1, 2, 3, 4, 5 };
var output = list.Random();
Random
sınıfı kullanılabilir. Geçerli indeksler aralığında dizi veya listenize rastgele bir sayı oluşturmak için kullanın. Daha fazla örnek görmek istiyorsanız
Random rand = new Random();
var user = Users[rand.Next(Users.Count)];
, birkaç rastgele odaklı LINQ uzantıları oluşturulan ve maddeye Extending LINQ with Random Operations bunu yayınladı.
[Linq: Linq kullanarak Rastgele Bir Nesne Nasıl Kullanılır] 'ın olası kopyası (http://stackoverflow.com/questions/3173718/linq-how-to-get-a-random-object-using-linq) – jfar