生成多个随机数

我想生成25个唯一的随机数,并将它们列在控制台中。 这些数字至少应为10个字符。 有什么简单的方法吗?

尝试将数字构建为字符串,并使用HashSet确保它们是唯一的:

Random random = new Random(); HashSet ids = new HashSet(); while (ids.Count < 25) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10; ++i) { sb.Append(random.Next(10)); } ids.Add(sb.ToString()); } 

输出示例:

 7895499338
 2643703497
 0126762624
 8623017810
 ...等等...

HashSet类存在于.NET 3.5及更高版本中。

问题在于“25个独特随机”。 显示25个随机数就像

 Random r = new Random(); for(int i=0; i<25; i++) Console.WriteLine(r.Next(1,100).ToString()); 

但这些并不一定是独一无二的。 如果您不想允许重复项,则需要以某种方式存储以前生成的数字,如果您使用旧数字,则需要再次滚动。

请注意,您通过这种方式更改生成的数字的概率分布。

编辑:我刚刚注意到这些数字应该是十个字符长。 由于9,999,999,999超过Int32.MaxValue,我建议使用Math.Floor(r.NextDouble() * 10000000000 + 1000000000)而不是r.Next(1,100)

由于您的数字很长,您不必担心重复。 他们非常不可能。

随机性和唯一性之间存在很大差异。

因此,如果您需要真正唯一的数字,您必须确保将所有已创建的数字保存在某处并检查新创建的数字是否不在此列表中,或者您必须提供一些算法以确保无法创建给定数字两次。

为了使第二部分起作用,你主要采取创作时刻的日期/时间,因为当前的日期/时间对永远是唯一的。 唯一的问题是你有多少每(毫秒)的创作数量以及可用于存储你的唯一数字的数字。

这里有一个关于使用12位数的样本。 希望这可以帮助。

一个简单的方法是:

 class Test { private static void Main() { Random rand = new Random(); for (int i = 0; i < 25; ++i) { Console.WriteLine(rand.Next(1000000000, int.MaxValue)); } } } 

这将确保数字总是10个字符(数字)长。 然而,它们不一定是唯一的。 如果你想让它们绝对独一无二,你必须做这样的事情:

 class Test { private static void Main() { Random rand = new Random(); var generatedSoFar = new HashSet(); for (int i = 0; i < 25; ++i) { int newRand; do { newRand = rand.Next(1000000000, int.MaxValue); } while (generatedSoFar.Contains(newRand)); // generate a new random number until we get to one we haven't generated before generatedSoFar.Add(newRand); Console.WriteLine(newRand); } } } 

如果您希望能够有超过十位数,则可以在10和最大位数之间随机生成位数。 然后在StringBuilder或List中随机生成每个数字(或数字组)。 您可以使用我上面使用的相同HashSet方法来确保唯一性。

  Random rnd = new Random(table); for(int i = 0; i < 25; ++i) { Console.WriteLine("{0}", rnd.Next(50, 50+i) }