如何随机化数组中的数字

时间:2011-05-03 04:10:35

标签: c# arrays random numbers

我有一个像这样的数组:

int[] numbers = new [] { 1, 2, 3, 4 };

我想随机化这个(每次都不同),这样它就可以制作另一个数组,每个数组的大小和数量相同但每次都有不同的顺序。

6 个答案:

答案 0 :(得分:17)

尝试这样的事情:

System.Random rnd = new System.Random();
var numbers = Enumerable.Range(1, 4).OrderBy(r => rnd.Next()).ToArray();

答案 1 :(得分:4)

这是一种可行的方法:

public List<int> Randomize(int[] numbers)
{
    List<int> randomized = new List<int>();
    List<int> original = new List<int>(numbers);
    Random r = new Random();
    while (original.Count > 0) {
        int index = r.Next(original.Count);
        randomized.Add(original[index]);
        original.RemoveAt(index);
    }

    return randomized;
}

修改

另一种方法是使用IEnumerable<T>集合的LINQ扩展方法:

var random = new Random();
List<int> randomized = numbers.OrderBy(x => random.Next()).ToList();

如果您想要一个数组而不是List<int>,则可以调用.ToArray()

当然,这适用于int的任何数组,不仅适用于1, 2, 3, ..., n。您甚至可以在T中将该方法设为通用。

答案 2 :(得分:2)

public  static void Shuffle<T>(T[] array)
{
    Random random = new Random();

    for (int i = 0; i < 10; i++)
    {
        int idx = random.Next(i, 10);

        //swap elements
        T tmp = array[i];
        array[i] = array[idx];
        array[idx] = tmp;
    }  
}

答案 3 :(得分:0)

这甚至会使值不重复;

for(int i=0;i<4;i++)
{
  int no_repeat = -1;

  int x,j;

  while(no_repeat!=1)
  {
    x=rand()%4;
    for(j=0;j<4;j++)
    {
      if(numbers[j]==x)
        break;
    }

    if(j==4)
      no_repeat=1;


  }

  if(no_repeat)
  numbers[i]=x;
}

答案 4 :(得分:0)

在我看来,最简单的方法是:

 int[] grid = new int[9];//size of array

        Random randomNumber = new Random();//new random number
        var rowLength = grid.GetLength(0);
        var colLength = grid.GetLength(1);
        for (int row = 0; row < rowLength; row++)
        {

                grid[col] = randomNumber.Next(4)+1;//Fills grid with numbers from
                                                        //1-4
                Console.Write(String.Format("{0}\t", grid[col]));
                //Displays array in console

            Console.WriteLine();
        }

答案 5 :(得分:-2)

有效:

numbers = numbers.OrderBy(s => Guid.NewGuid()).ToArray();