好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

1100内产生3个不重复的随机数

1100内产生3个不重复的随机数

Code
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  BerkeleyDBDemo
{
     class  Class16
    {
         static   void  Main( string [] args)   
        {   
            DateTime d1  =  System.DateTime.Now;   
             int [] list1  =  GetRandom1( 1 ,  100000 ,  5000 );   
            TimeSpan dd1  =  System.DateTime.Now  -  d1;   
  
            DateTime d2  =  System.DateTime.Now;   
             int [] list2  =  GetRandom2( 1 ,  100000 * 100 ,  5000 );   
            TimeSpan dd2  =  System.DateTime.Now  -  d2;   
  
             // foreach (int i in list1)   
             //     Console.Write("{0},", i);   
             // foreach (int ii in list2)   
             //     Console.Write("{0},", ii);   
  
            Console.WriteLine( " 第一种方法,1-100000    里取5000个用时:{0} " , dd1.TotalMilliseconds);   
            Console.WriteLine( " 第二种方法,1-100000*100里取5000个用时:{0} " , dd2.TotalMilliseconds);   
  
            Console.WriteLine( " 判断第二种方法里是否有重复数,如果是5000就是没有重复的:{0} " ,RemoveDup(list2).Length);   
            Console.WriteLine( " my test================= " );
             int [] a = GetRandom1( 1 ,  100 ,  99 );
            Array.Sort(a);
             foreach (var i  in  a)
                Console.WriteLine(i);
            
            Console.ReadKey();   
  
        }   
  
         public   static   int [] RemoveDup( int [] myData)   
        {   
             if  (myData.Length  >   0 )   
            {   
                Array.Sort(myData);   
                 int  size  =   1 ;   
                 for  ( int  i  =   1 ; i  <  myData.Length; i ++ )   
                     if  (myData[i]  !=  myData[i  -   1 ])   
                        size ++ ;   
                 int [] myTempData  =   new   int [size];   
                 int  j  =   0 ;   
                myTempData[j ++ ]  =  myData[ 0 ];   
                 for  ( int  i  =   1 ; i  <  myData.Length; i ++ )   
                     if  (myData[i]  !=  myData[i  -   1 ])   
                        myTempData[j ++ ]  =  myData[i];   
                 return  myTempData;   
            }   
             return  myData;   
        }     
  
  
         // 方法1   
         public   static   int [] GetRandom1( int  minValue,  int  maxValue,  int  count)   
        {   
  
            Random rnd  =   new  Random();   
             int  length  =  maxValue  -  minValue  +   1 ;   
             byte [] keys  =   new   byte [length];   
            rnd.NextBytes(keys);   
             int [] items  =   new   int [length];   
             for  ( int  i  =   0 ; i  <  length; i ++ )   
            {   
                items[i]  =  i  +  minValue;   
            }   
            Array.Sort(keys, items);   
             int [] result  =   new   int [count];   
            Array.Copy(items, result, count);   
             return  result;   
  
        }   
  
         // 方法2   
         public   static   int [] GetRandom2( int  minValue,  int  maxValue,  int  count)   
        {   
             int [] intList  =   new   int [maxValue];   
             for  ( int  i  =   0 ; i  <  maxValue; i ++ )   
            {   
                intList[i]  =  i  +  minValue;   
            }   
             int [] intRet  =   new   int [count];   
             int  n  =  maxValue;   
            Random rand  =   new  Random();   
             for  ( int  i  =   0 ; i  <  count; i ++ )   
            {   
                 int  index  =  rand.Next( 0 , n);   
                intRet[i]  =  intList[index];   
                intList[index]  =  intList[ -- n];   
            }   
  
             return  intRet;   
        }   
  
    }   

    }

在博问中TerryLee ,丁学给出了自己的答案,但是最后还是google了三番,觉得上面这两种方法是比较不错的实现,最近懒了,发现如果代码绕的弯太大,总想有没有简洁的方法实现,如果太复杂,我就会用最折衷的方法就去实现,代码写的太复杂日后也看不懂, 注意这里没有处理这种情况,当想在1-10中取出11个不重复的数时的情况,这种情况显示会抛出异常,在自己使用时加个异常处理或是判断

查看更多关于1100内产生3个不重复的随机数的详细内容...

  阅读:37次