生成不重复的随机数

最近项目中用到大量的不重复的随机数,

在网上查了资料http://blog.csdn.net/xujinpeng99/article/details/6387782

Random类都是伪随机的,就是看上去象随机但实际上是用一个公式推导出来的,只要能产 生足够长的伪随机序列就行。相同的种子生成的随机系列肯定相同,

所以一般找个随即的数 做种子这样产生的随机系列可以保证每次都不同,默认是根据计算机时钟精度来设置seed种子.

Random rand = new Random(Guid.NewGuid().GetHashCode());

MSDN上关于GUID的解释:
GUID 是一个 128 位整数(16 字节),可用于所有需要唯一标识符的计算机和网络。此标
识符重复的可能性非常小。

///<summary>   

    ///产生不重复随机数的应用    

    ///摘要 C#随机数的应用中 如果是需要在短时间内产生大量随机数 推荐使用Guid.NewGuid().GetHashCode()作为种子    

    ///</summary>   

    class Program

    {

        static void Main(string[] args)

        {

            FileStream fs = new FileStream(@"c:\Code.txt", FileMode.Create, FileAccess.Write);

            StreamWriter sw = new StreamWriter(fs);

            List<int> Numbers = Program.GetRandom(1000000000,2147483640,210);

            for (int i = 0; i < Numbers.Count; i++)

            {

                Console.WriteLine("GC212" + Numbers[i]);

                sw.WriteLine("GC212" + Numbers[i]);

            }

            sw.Close();

            Console.WriteLine("写入文件完成");

            Console.ReadLine();

        }



        ///<summary>   

        ///返回一组唯一不重复的随机数   

        ///</summary>   

        ///<param name="minValue">最小值</param>   

        ///<param name="maxValue">最大值</param>   

        ///<returns>返回一组唯一不重复的随机数</returns>   

        public static List<int> GetRandom(int minValue, int maxValue, int count)

        {

            List<int> Numbers = new List<int>();

            //使用Guid.NewGuid().GetHashCode()作为种子,可以确保Random在极短时间产生的随机数尽可能做到不重复   

            Random rand = new Random(123456);

            Console.WriteLine("GUID:" + Guid.NewGuid().GetHashCode());

            int item;

            for (int i = minValue; i <= maxValue; i++)

            {

                item = rand.Next(minValue, maxValue + 1);

                while (Numbers.IndexOf(item) != -1)

                {

                    item = rand.Next(minValue, maxValue + 1);

                }

                Numbers.Add(item);

                if (Numbers.Count >= count)

                    break;



            }



            return Numbers;

        }

    }

 

你可能感兴趣的:(随机数)