none
数组乱序排列List和arraylist RRS feed

  • 问题

  • 如何对ArrayList和List数组里面的内容,乱序排列一次。打乱顺序,再存回数组本身中

     

    拜谢,求解。

    2011年8月23日 5:23

答案

  • 以下针对List直接打乱,没有再存回数组
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
    
     class Program
     {
    
      static void Main(string[] args)
      {
       List<string> yourList = new List<string>();
       yourList.Add("1");
       yourList.Add("2");
       yourList.Add("3");
       yourList.Add("4");
       yourList.Add("5");
    
       shuffle(yourList);
    
       foreach (string item in yourList)
       {
        Console.WriteLine(item);//顯示打乱結果 
        }
       Console.ReadKey();
    
      }
    
      // swaps array elements i and j
      public static void exch(List<string> list, int i, int j)
      {
    
       String swap = list[i];
       list[i] = list[j];
       list[j] = swap;
      }
    
    
      // take as input an array of strings and rearrange them in random order
      public static void shuffle(List<string> list)
      {
       int N = list.Count;
       for (int i = 0; i < N; i++)
       {
        int r = (new Random().Next(0,N)); // between i and N-1
        exch(list, i, r);
       }
      }
    
     }
    
    }
    

     其他參考:

    http://introcs.cs.princeton.edu/java/15inout/Shuffle.java.html

    http://www.code56.com/2009/02/lets-do-some-shuffling.html


    Shadowと愉快なコード達

    • 已标记为答案 小五kyle 2011年8月23日 7:16
    2011年8月23日 6:53
  • 一般我的做法是,给数组增加一个额外的列,在这个列里面随机生成数字或者字符,然后对这个随机列排序,然后就能达到随机排序的目的了。

     

    如果有更好的办法,麻烦和我说一下。


    family as water
    2011年8月23日 6:19

全部回复

  • 一般我的做法是,给数组增加一个额外的列,在这个列里面随机生成数字或者字符,然后对这个随机列排序,然后就能达到随机排序的目的了。

     

    如果有更好的办法,麻烦和我说一下。


    family as water
    2011年8月23日 6:19
  • 以下针对List直接打乱,没有再存回数组
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
    
     class Program
     {
    
      static void Main(string[] args)
      {
       List<string> yourList = new List<string>();
       yourList.Add("1");
       yourList.Add("2");
       yourList.Add("3");
       yourList.Add("4");
       yourList.Add("5");
    
       shuffle(yourList);
    
       foreach (string item in yourList)
       {
        Console.WriteLine(item);//顯示打乱結果 
        }
       Console.ReadKey();
    
      }
    
      // swaps array elements i and j
      public static void exch(List<string> list, int i, int j)
      {
    
       String swap = list[i];
       list[i] = list[j];
       list[j] = swap;
      }
    
    
      // take as input an array of strings and rearrange them in random order
      public static void shuffle(List<string> list)
      {
       int N = list.Count;
       for (int i = 0; i < N; i++)
       {
        int r = (new Random().Next(0,N)); // between i and N-1
        exch(list, i, r);
       }
      }
    
     }
    
    }
    

     其他參考:

    http://introcs.cs.princeton.edu/java/15inout/Shuffle.java.html

    http://www.code56.com/2009/02/lets-do-some-shuffling.html


    Shadowと愉快なコード達

    • 已标记为答案 小五kyle 2011年8月23日 7:16
    2011年8月23日 6:53
  • Next(0,N)应该是Next(i,N)
    2020年12月22日 8:06