如何随机化数组中的数字

我有一个像这样的数组:

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

我想随机化这个(每次都不同),这样它就会使另一个数组具有相同的大小和数字,但每次都以不同的顺序排列。

尝试这样的事情:

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

这是一个可行的方法:

 public List Randomize(int[] numbers) { List randomized = new List(); List original = new List(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集合使用LINQ扩展方法:

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

如果你想拥有一个数组而不是List你可以调用.ToArray()

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

 public static void Shuffle(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; } } 

这甚至要注意价值观不重复;

 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; } 

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

  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(); } 

有用:

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