Если вы только генерировать 1000 6-значных чисел, это довольно легко:
int NumberToGenerate = 1000;
Random rnd = new Random();
HashSet uniqueNumbers = new HashSet<int>();
while (uniqueNumbers.Count < NumberToGenerate)
{
int next = Random.Next(100000, 1000000);
uniqueNumbers.Add(next);
}
Цикл будет почти наверняка генерировать несколько дубликатов, но HashSet
будет отвергать их.
Другой способ сделать это - создать список всех чисел от 100 000 до 999 999. Затем, когда вам нужно число, произвольно удалите элемент из списка.
private List<int> allNumbers = new List<int>();
// in the constructor
for (var i = 100000; i < 1000000; ++i)
{
allNumbers.Add(i);
}
private Random rnd = new Random();
public int GetNumber()
{
var index = rnd.Next();
var rslt = allNumbers[index];
allNumbers.RemoveAt(index);
return rslt;
}
Вызов RemoveAt
вроде дорого. Вы можете немного ускорить работу:
// move the last number in the list to fill the hole
allNumbers[index] = allNumbers[allNumbers.Count-1];
// remove the last item
allNumbers.RemoveAt(allNumbers.Count-1);
Это позволит свести к минимуму объем памяти, перемещаемый при удалении.
Или, вы можете создать список всех чисел, перетасовать их, а затем вернуть их с фронта:
// assume you've created the list of numbers, as above
// Shuffle them
for (int i = 0; i < allNumbers.Count; ++i)
{
int j = rnd.Next(i, allNumbers.Count);
int temp = allNumbers[i];
allNumbers[i] = allNumbers[j];
allNumbers[j] = temp;
}
Теперь вы можете вернуть верхние 1000 номеров или вы можете написать метод для возвращения следующий в последовательности всякий раз, когда он вызывается.
Ваш вопрос действительно о том, как сгенерировать набор уникальных случайных чисел. Например, вы можете использовать алгоритм так же, как это можно увидеть в [сгенерировать уникальные случайные числа] (http://java.about.com/od/javautil/a/uniquerandomnum.htm). – user1929959
необходимо создать уникальные номера для моего приложения C#, удовлетворяющего нижеследующим требованиям. 1. 6 разряд. 2. около 1000 номеров, которые будут генерироваться каждый день Вот моим вопрос это так просто и ясно, что я прошу об алгоритме для генерации уникального Randam числа – user2120457
Может число порождающего сегодня дубликаты те, которые вы сгенерированные вчера ? –