怎么用c#编程对数组里的数据进行随机采样、规则采样啊 求思路和代码啊

解决方案 »

  1.   

    //假设有任意一个数组
    int []card = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};     //数组长度不固定,任何类型的一维数组也一样,这里举例int型的20长度的数组//定义样本的长度,应当小于或等于card的长度
    int intYBLen=5;  //定义一个新数组,作为样本
    int []cardYB = new int[intYBLen];int n = cardYB.Length;
    int i;
    Random rnd =new Random();   //定义随机生成器
    while (n >= 0)
    {
       int j = rnd.Next(n);  //随机一个数,这个数从0~n-1之间
        cardYB[i] = card[j];  //将随机数对应的数组值给新数组
        card[j] = card[n];    //将顺序数组最后一个数补刚才随机走的那个位置
        n--;                  //顺序数组范围减小1
        i++;                  //新数组位置加1
    }//cardYB数组里的数就是5个随机样本
      

  2.   


    //假设有任意一个数组
                int[] card = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };     //数组长度不固定,任何类型的一维数组也一样,这里举例int型的20长度的数组            //定义样本的长度,应当小于或等于card的长度
                int intYBLen = 5;            //定义一个新数组,作为样本
                int[] cardYB = new int[intYBLen];            //int n = cardYB.Length;
                int n = card.Length;            int i=0;
                Random rnd = new Random();   //定义随机生成器
                
                while (i<intYBLen)
                {
                    
                    int j = rnd.Next(n);  //随机一个数,这个数从0~n-1之间
                                    cardYB[i] = card[j];  //将随机数对应的数组值给新数组
                    card[j] = card[n-1];    //将顺序数组最后一个数补刚才随机走的那个位置
                   
                                   n--;                  //顺序数组范围减小1
                    i++;                  //新数组位置加1
                }            //cardYB数组里的数就是5个随机样本            foreach (int x in cardYB)
                {
                    Console.WriteLine(x);
                }
                Console.Read();上面的改的
      

  3.   

    呵呵,直接在这里手写的,没调试,是有点小问题
    等我调试再发下//假设有任意一个数组
                int[] card = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };     
    //数组长度不固定,任何类型的一维数组也一样,这里举例int型的20长度的数组            //定义样本的长度,应当小于或等于card的长度
                int intYBLen = 5;            //定义一个新数组,作为样本
                int[] cardYB = new int[intYBLen];            int n = cardYB.Length;
                int i=0;
                Random rnd = new Random();   //定义随机生成器
                while (n > 0)
                {
                    int j = rnd.Next(card.Length-i);  //随机一个数,这个数从0~n-1之间
                    cardYB[i] = card[j];  //将随机数对应的数组值给新数组
                    card[j] = card[n];    //将顺序数组最后一个数补刚才随机走的那个位置
                    n--;                  //顺序数组范围减小1
                    i++;                  //新数组位置加1
                }            //cardYB数组里的数就是5个随机样本