.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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д