如何生成一个独特的4位字符串

时间:2009-03-05 20:55:00

标签: c#

我正在寻找一种方法,使用C#为每个数字生成一个(相当)唯一(非自动递增)4位数字符串,使用数字0 - 9。如果找到dup,我可以验证唯一性并生成另一个数字。我曾想过以某种方式将数字基于DateTime对象的Ticks属性,但我很难将各个部分放在一起。

非常感谢任何想法或专业知识。

5 个答案:

答案 0 :(得分:9)

如果它没有增加,第二次怎么会变得独一无二?

您所说的是想要从所有可能未使用的4位数字符串的集合中生成随机的4位数字符串吗?

如果是这样,正确的方法通常是生成所有可能的4位数字符串,并将它们随机排列。然后在你需要新的时候按顺序拿它们。

澄清:其他答案建议只生成一个随机的4位数字符串并将其留在那里。据推测,你会检查它是否已被使用,如果使用它,则生成另一个。这可能具有非常不理想的性能。假设您已经使用了9,999(除了一个)可能的4位数字符串,范围从0000到9999.要生成最后一个,此方法可能需要多次尝试。

答案 1 :(得分:1)

使用短类型创建一个包含所有10000个值的数组,然后使用shuffle

答案 2 :(得分:0)

取决于您的要求。你期望产生多少这些?如果你只需要几百,你可以生成一个0到9999的随机数。如果你希望生成所有10,000个,那么你应该像Earwicker所说的那样做,并保留所有未使用值的列表。

我建议你从最简单的算法开始(选择一个随机数1到9999),并使用它直到它太慢。然后回去并放入Earwicker的。

答案 3 :(得分:-1)

从0-9生成四个随机数,然后对它们进行字符串连接。

答案 4 :(得分:-3)

Random randomNumberGenerator = new Random();
return string.Concat(
    randomNumberGenerator.Next(0, 9),
    randomNumberGenerator.Next(0, 9),
    randomNumberGenerator.Next(0, 9),
    randomNumberGenerator.Next(0, 9));