Почему C# random возвращает одно и то же значение?
Я использовал метод Random class "Next(int32, int32) для генерации случайного числа, которое попадает в диапазон.
Допустим, диапазон довольно большой. Разница между парам1 и парам2 равна 100.
Если мне нужно случайное число в итерации (предположим, 5 раз), то 3 из 5 раз я получаю одно и то же значение.
Как получить случайное число, которое не повторяется для диапазона?
Или мне следует просто использовать генераторы случайных чисел, предоставляемые крипто-сервисом?
Что я уже пробовал:
1. Первое решение включало создание нового экземпляра в цикле.
public List<string> GetRandomRecords(List<string> records, int requiredRecords) { var numberOfRecords = records.Count; var randomRecords = new List<string>(); for (int i = 0; i < requiredRecords; i++) { var randomGenerator = new Random(); while (true) { var randomIndex = randomGenerator.Next(0, numberOfRecords); var record = records[randomIndex]; if (!randomRecords.Contains(record)) { randomRecords.Add(record); break; } } } return randomRecords.OrderBy(item => Guid.NewGuid()).ToList(); }
2. Изменено решение использовать тот же экземпляр в петлю.
public List<string> GetRandomRecords(List<string> records, int requiredRecords) { var numberOfRecords = records.Count; var randomRecords = new List<string>(); var randomGenerator = new Random(); for (int i = 0; i < requiredRecords; i++) { while (true) { var randomIndex = randomGenerator.Next(0, numberOfRecords); var record = records[randomIndex]; if (!randomRecords.Contains(record)) { randomRecords.Add(record); break; } } } return randomRecords.OrderBy(item => Guid.NewGuid()).ToList(); }
Patrice T
Покажи свой код !
Dave Kreskowiak
Это звучит так, как будто вы создаете новый экземпляр Random внутри цикла. Не делай этого! Но мы не можем этого сказать, потому что не видим вашего кода.
George Swan
Один из подходов для генерации уникальных случайных чисел в заданном диапазоне состоит в том, чтобы поместить все числа в требуемом диапазоне в массив. Перетасуйте массив и последовательно извлеките из него необходимые элементы.