.NET 4.x Генерация массива случайных неповторяющихся чисел - C#

Узнай цену своей работы

Формулировка задачи:

Нужно сгенирировать массив случайных чисел. Предположим что массив размером 10000, а диапазон чисел от 1 до 1000000. Вариант брать число рандомом проверять на наличие такого же числа в массиве.... плохой вариант, т.к. долгий, не эффективный и т.д. Может есть какие-то формулы? Алгоритмы подбора\генерации? Подскажите пожалуйста варианты. Варианты с полноценным использованием платформы, типа P\LINQ устраивают, ток без тупых переборов всего массива. Может что-то кто-то поизобретательнее знает?!

Решение задачи: «.NET 4.x Генерация массива случайных неповторяющихся чисел»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Security.Cryptography;
 
namespace ConsoleApplication7 {
    class Program {
        static void Main(string[] args) {
            HashSet<int> hash = new HashSet<int>();
            RNGCryptoServiceProvider generator = new RNGCryptoServiceProvider();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            while (hash.Count != 10000) {
                byte[] arr = new byte[3];
                generator.GetBytes(arr);
                int temp = (arr[0] << 16) + (arr[1] << 8) + arr[2];
                if (temp <= 1000000) {
                    hash.Add(temp);
                }
            }
            sw.Stop();
            Console.WriteLine("Done! Time for operation: {0}", sw.Elapsed);
            Console.ReadLine();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы