2016-08-23 2 views
-2

Я использую этот код, чтобы выбрать случайный элемент из списка:Как я могу выбрать случайную запись из списка?

var rand = new Random(); 
var i = rand.Next(words.Count); 
keyword = words[i].keyword; 

Это оптимальный способ сделать это, или есть лучший способ, которым я мог бы использовать? Меня особенно волнует, будет ли это совершенно случайным?

+2

Насколько случайным является «абсолютно случайным»? –

+1

Как насчет «рандомизации» индексов элементов списка каждый раз, когда вы хотите выбрать случайную запись? – CodeWalker

ответ

2

Это будет несимметрично случайным образом, вы должны не создать новый экземпляр Random каждый раз, когда вам нужно число. Это полностью разрушает статистические свойства генератора.

Даже тогда вы не достигнете идеальной случайности (для этого вам понадобятся внешние аппаратные средства), но она должна удовлетворять всем основным свойствам случайности.

+0

«Выполнение этого полностью разрушает статистические свойства генератора». Нужна цитата. – Thilo

+0

Или доказательство с помощью демонстрации: создайте график x-y повторного 'new Random(); x = Next; y = Next', если вы получите мое значение и визуально просмотрите вывод. – Bathsheba

+0

Является ли случайный экземпляр основанным на времени? Время будет на 5-10 секунд друг от друга и на основе того, когда используется клик, чтобы это сделало его лучше? – Alan2

4

Если вы собираетесь создать несколько случайных чисел, вы должны сохранить экземпляр Random и повторно использовать его. Если вы создадите новые экземпляры слишком близко по времени, они будут создавать ту же последовательность случайных чисел, что и случайный генератор, высеваемый из системных часов.

Каждый раз, когда вы делаете новое Random(), оно инициализируется. Это означает, что в замкнутом цикле вы получаете одно и то же значение много раз. Вы должны сохранить один экземпляр Random и продолжать использовать Next в том же экземпляре.

Надеюсь, что это поможет !!!

0

Put эта линия для одной инициализации времени: var rand = new Random();

Используйте ниже код, чтобы генерировать новый номер каждый раз.

var i = rand.Next(words.Count); 
keyword = words[i].keyword; 

Надеюсь, это поможет вам.

Смежные вопросы