如何从C#中的数组中获取随机值

可能重复:
访问列表中的随机项

我有一个数字数组,我想从这个数组中获取随机元素。 例如:{0,1,4,6,8,2}。 我想选择6并将此数字放在另一个数组中,新数组的值为{6,….}。

我使用random.next(0,array.length),但这给出了一个随机数的长度,我需要随机数组。

for (int i = 0; i < caminohormiga.Length; i++ ) { if (caminohormiga[i] == 0) { continue; } for (int j = 0; j < caminohormiga.Length; j++) { if (caminohormiga[j] == caminohormiga[i] && i != j) { caminohormiga[j] = 0; } } } for (int i = 0; i < caminohormiga.Length; i++) { int start2 = random.Next(0, caminohormiga.Length); Console.Write(start2); } return caminohormiga; 

我使用random.next(0,array.length),但这给出了随机数的长度,我需要随机数组。

使用random.next(0, array.length)的返回值作为索引从array获取值

  Random random = new Random(); int start2 = random.Next(0, caminohormiga.Length); Console.Write(caminohormiga[start2]); 

洗牌

 int[] numbers = new [] {0, 1, 4, 6, 8, 2}; int[] shuffled = numbers.OrderBy(n => Guid.NewGuid()).ToArray(); 

试试这样吧

 int start2 = caminohormiga[ran.Next(0, caminohormiga.Length)]; 

代替

 int start2 = random.Next(0, caminohormiga.Length); 

您只需使用随机数作为数组的引用:

 var arr1 = new[]{1,2,3,4,5,6} var rndMember = arr1[random.Next(arr1.Length)]; 

我在评论中注意到你没有重复,所以你希望数字被“洗牌”类似于一副牌。

我会使用List<>作为源项, 随机抓取它们并将它们送到Stack<>以创建数字组。

这是一个例子:

 private static Stack CreateShuffledDeck(IEnumerable values) { var rand = new Random(); var list = new List(values); var stack = new Stack(); while(list.Count > 0) { // Get the next item at random. var index = rand.Next(0, list.Count); var item = list[index]; // Remove the item from the list and push it to the top of the deck. list.RemoveAt(index); stack.Push(item); } return stack; } 

那么:

 var numbers = new int[] {0, 1, 4, 6, 8, 2}; var deck = CreateShuffledDeck(numbers); while(deck.Count > 0) { var number = deck.Pop(); Console.WriteLine(number.ToString()); } 
 Console.Write(caminohormiga[start2]);