web-dev-qa-db-fra.com

Comment obtenir des valeurs aléatoires d'un tableau en C #

Dupliquer possible:
Accéder à un élément aléatoire de la liste

J'ai un tableau avec des nombres et je veux obtenir des éléments aléatoires de ce tableau. Par exemple: {0,1,4,6,8,2}. Je veux sélectionner 6 et mettre ce nombre dans un autre tableau, et le nouveau tableau aura la valeur {6, ....}. 

J'utilise random.next (0, array.length), mais cela donne un nombre aléatoire de la longueur et j'ai besoin des nombres de tableaux aléatoires.

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;
13
Shebystian

J'utilise random.next (0, array.length), mais cela donne un nombre aléatoire de la longueur et j'ai besoin des nombres de tableaux aléatoires.

Utilisez la valeur de retour de random.next(0, array.length) comme index pour obtenir la valeur de array

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

Mélanger

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

Essayez comme ça 

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

au lieu de 

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

Vous devez juste utiliser le nombre aléatoire comme référence au tableau:

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

J'ai remarqué dans les commentaires que vous ne vouliez pas de répétition, vous voulez donc que les numéros soient "mélangés" comme un jeu de cartes.

Je voudrais utiliser un List<> pour les éléments source, les récupérer au hasard et Les pousser vers un Stack<> pour créer le jeu de nombres.

Voici un exemple:

private static Stack<T> CreateShuffledDeck<T>(IEnumerable<T> values)
{
  var Rand = new Random();

  var list = new List<T>(values);
  var stack = new Stack<T>();

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

Donc alors:

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());
}
1
Erik
Console.Write(caminohormiga[start2]);
0
SergeyS