BerkeleyDBDemo
{
    class Class16
    {
        
static void Main(string[] args)   
        {   
            DateTime d1 
= System.DateTime.Now;   
            
int[] list1 = GetRandom1(11000005000);   
            TimeSpan dd1 
= System.DateTime.Now - d1;   
  
            DateTime d2 
= System.DateTime.Now;   
            
int[] list2 = GetRandom2(1100000*1005000);   
            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(110099);
            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个不重复的数时的情况,这种情况显示会抛出异常,在自己使用时加个异常处理或是判断

相关文章:

  • 2021-06-22
  • 2022-12-23
  • 2021-08-16
  • 2021-08-12
  • 2022-12-23
  • 2021-10-29
  • 2021-10-19
猜你喜欢
  • 2021-09-29
  • 2021-08-16
  • 2021-12-20
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-08-16
相关资源
相似解决方案