, 그것은 꽤 쉽게 :
는
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;
}
, 당신이 최고 1,000 번호를 반환하거나 반환하는 방법을 쓸 수 있습니다 그것이 호출 될 때마다 순서대로 다음 하나가됩니다.
귀하의 질문은 정말 고유 한 난수 세트를 생성하는 방법에 관한 것입니다. 예를 들어, [고유 난수 생성] (http://java.about.com/od/javautil/a/uniquerandomnum.htm)에서 볼 수있는 알고리즘을 사용할 수 있습니다. – user1929959
은 아래 요구 사항을 충족하는 C# 응용 프로그램의 고유 번호를 생성해야합니다. 1. 6 자리. 2. 약 1000 번호는 그렇게 간단하고 난 당신이 오늘 생성 숫자가 어제 생성 된 것들의 중복이 될 수있는 고유 RANDAM 번호 – user2120457
를 생성하는 알고리즘에 대한 요구하고 있음을 분명 내 질문에 그게 전부 일상 를 생성한다 ? –