Вы должны попробовать это:
var rnd = new Random();
foreach (var x in Hashtags.OrderBy(x => rnd.Next()).Take(30))
{
Console.WriteLine(x);
}
Это имеет O(n^2)
сложность, но легко читается.
Если вы хотите повысить эффективность, попробуйте Fisher-Yates Shuffle, это O(n)
, но менее читабельный:
var take = 30;
var rnd = new Random();
for (var i = 0; i < (Hashtags.Count < take ? Hashtags.Count : take); i++)
{
var j = rnd.Next(Hashtags.Count);
(Hashtags[i], Hashtags[j]) = (Hashtags[j], Hashtags[i]);
}
foreach (var x in Hashtags.Take(take))
{
Console.WriteLine(x);
}
Имейте в виду, что лучше всего создать экземпляр Random
один раз для каждого потока, так что это был бы лучший способ:
[ThreadStatic]
private static Random rnd = new Random();