Неправильно работает рандомизация [дубликат]

233
26 июля 2021, 13:50
На этот вопрос уже дан ответ здесь:
Начальное значение Random() в C# (1 ответ)
Закрыт 1 год назад.

Есть код, который рандомизирует общий список, и даёт на выход N-элементов Иногда он возвращает всё время одинаковые данные, иногда норм работает. В чем может быть проблема?

public static IList<TSource> RandomizeCollection<TSource>(this IList<TSource> source, int maxItems)
        {
            int randomCount = source.Count > maxItems ? maxItems : source.Count;
            int?[] randomizedIndices = new int?[randomCount];
            Random random = new Random();
            for (int i = 0; i < randomizedIndices.Length; i++)
            {
                int randomResult = -1;
                while (randomizedIndices.Contains((randomResult = random.Next(0, source.Count))))
                {
                    //0 -> since all list starts from index 0; source.Count -> maximum number of items that can be randomize
                    //continue looping while the generated random number is already in the list of randomizedIndices
                }
                randomizedIndices[i] = randomResult;
            }
            IList<TSource> result = new List<TSource>();
            foreach (int index in randomizedIndices)
                result.Add(source.ElementAt(index));
            return result;
        }
Answer 1

Возможно слишком быстро идут два вызова подряд этой функции - и Random оказывается инициализирован одинаковым семенем. Вынесите метод в отдельный класс, и создавайте Random один раз вне функции. должно заработать

READ ALSO
Пробелы в понимании работы Entity Framework

Пробелы в понимании работы Entity Framework

Доброе время суток! Не так давно начал осваивать Entity Framework, но заметил, что все гайды упускают некоторые вещи, которые мне очень хотелось бы понять

105
Соединить 2 словаря поочередно

Соединить 2 словаря поочередно

Есть 2 словаря типа Dictionary<string, Person>, например:

208
NPOI Excell merged region

NPOI Excell merged region

Есть код для формирования Excell документа

245
Как обработать ошибку в Blazor от Web Api

Как обработать ошибку в Blazor от Web Api

Всем привет! Есть два приложения:

280