Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 唯一6个数字生成器算法_Visual Studio 2008_C# 4.0 - Fatal编程技术网

Visual studio 2008 唯一6个数字生成器算法

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)); 目前,

我需要为满足以下要求的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));

目前,我正在使用此算法,但会出现重复,因此我希望另一个算法符合上述要求。

如果您只生成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;
}