我想生成25个唯一的随机数,并将它们列在控制台中。这些数字至少应为10个字符。有没有简单的方法呢?
答案 0 :(得分:13)
尝试将数字构建为字符串,并使用HashSet确保它们是唯一的:
Random random = new Random();
HashSet<string> ids = new HashSet<string>();
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 ...etc...
类HashSet
存在于.NET 3.5及更高版本中。
答案 1 :(得分:2)
问题在于“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)
。
由于你的号码很长,你不必担心重复。他们非常不可能。
答案 2 :(得分:1)
随机性和唯一性之间存在很大差异。
因此,如果您需要真正的唯一数字,您必须确保将所有已创建的数字保存在某处,并检查新创建的数字是否不在此列表中,或者您必须提供某些算法确保给定数字不能创建两次。
为了使第二部分起作用,你大部分时间都是创造时刻的日期/时间,因为当前的日期/时间对永远是唯一的。唯一的问题是你有多少每(毫秒)的创作数量以及可用于存储你的唯一数字的数字。
关于使用12位is made here的示例。希望这会有所帮助。
答案 3 :(得分:0)
一个简单的方法是:
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<int>();
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方法来确保唯一性。
答案 4 :(得分:-2)
Random rnd = new Random(table);
for(int i = 0; i < 25; ++i) {
Console.WriteLine("{0}", rnd.Next(50, 50+i)
}