Visual studio 2008 唯一6个数字生成器算法
我需要为满足以下要求的C应用程序生成唯一的编号- 6位 每天大约生成1000个数字Visual studio 2008 唯一6个数字生成器算法,visual-studio-2008,c#-4.0,Visual Studio 2008,C# 4.0,我需要为满足以下要求的C应用程序生成唯一的编号- 6位 每天大约生成1000个数字 byte[] buffer = Guid.NewGuid().ToByteArray(); return string.Concat(((int)type).ToString(), BitConverter.ToInt64(buffer, 0).ToString().Substring(1, 6-((int)type).ToString().Length)); 目前,
byte[] buffer = Guid.NewGuid().ToByteArray();
return string.Concat(((int)type).ToString(),
BitConverter.ToInt64(buffer, 0).ToString().Substring(1,
6-((int)type).ToString().Length));
目前,我正在使用此算法,但会出现重复,因此我希望另一个算法符合上述要求。如果您只生成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);
}
打电话给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个数字,也可以编写一个方法,在每次调用时按顺序返回下一个数字。您的问题实际上是如何生成一组唯一的随机数。例如,您可以使用中所示的算法。需要为满足以下要求的C应用程序生成唯一的数字-。1.6位。2.每天大约要生成1000个数字这是我的问题,非常简单明了,我想问的是生成唯一随机数的算法。你今天生成的数字能与你昨天生成的数字重复吗?
// 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;
}