.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();
}
}
}