如何在没有相同的情况下获得随机数

时间:2018-04-27 18:34:23

标签: c# asp.net

我遇到的问题是,当我想为我的数据库创建一个id时,我会为此生成一个随机数,不好的是它会被重复。

desc

2 个答案:

答案 0 :(得分:1)

如果您只是寻找唯一ID(并且您不需要整数),则可以使用UUID:

String id = Guid.NewGuid().ToString()

如果您需要唯一的整数ID,最好使用数据库生成它们(例如mysql' s AUTO_INCREMENT

答案 1 :(得分:0)

简单地说:你不能直接。

System.Random可以一遍又一遍地生成相同的数字。如果你仍想获得独特的随机性'数字,您需要将生成的数字存储在列表中,然后检查新生成的数字是否在列表中。

using System;
using System.Collections.Generic;

class Program
{
    public static int Main(string[] args)
    {
        var numbers = new List<int>();
        Random rnd = new Random();
        for (int n = 0; n < 20; n++)
        {
            int num = rnd.Next(1000, 9999);
            for (int i = 0; i < numbers.Count; i++)
            {
                if (num == numbers[i])
                {
                    while (num == numbers[i])
                        num = rnd.Next(1000, 9999);
                    i = -1;
                }
            }
            numbers.Add(num);
        }
        // Uncomment if you want sorting
        // numbers.Sort();
        // Print numbers so we can check that every entry is unique
        for (int i = 0; i < numbers.Count; i++)
            Console.WriteLine("Id: {0}", numbers[i]);
        return 0;
    }
}

如果之前生成相同的数字,此代码将尝试生成随机数,然后重新启动以使用列表检查数字。非常低效,并且与“边缘”相比效果不佳。数字。 (例如,您尝试生成一个只包含19个随机数的20个条目列表)