it-swarm.com.de

Wie man zufällige Werte von Array in C # erhält

Mögliches Duplizieren:
Zugriff auf zufälliges Element in der Liste

Ich habe ein Array mit Zahlen und möchte zufällige Elemente aus diesem Array erhalten. Zum Beispiel: {0,1,4,6,8,2}. Ich möchte 6 auswählen und diese Nummer in ein anderes Array einfügen, und das neue Array wird den Wert {6, ....} haben. 

Ich verwende random.next (0, array.length), aber dies gibt eine Zufallszahl der Länge und ich benötige die Zufallszahlen.

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

Ich verwende die random.next (0, array.length), aber dies gibt eine Zufallszahl der Länge und ich brauche die Zufallszahlen.

Verwenden Sie den Rückgabewert von random.next(0, array.length) als Index, um den Wert von der array abzurufen.

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

Zum Mischen

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

Versuchen Sie es so 

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

anstatt 

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

Sie müssen nur die Zufallszahl als Referenz auf das Array verwenden:

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

Ich habe in den Kommentaren bemerkt, dass Sie keine Wiederholungen wünschen, also möchten Sie, dass die Zahlen "gemischt" werden, ähnlich einem Kartenstapel.

Ich würde einen List<> für die Quellelemente verwenden,/packe sie nach dem Zufallsprinzip und Push sie zu einem Stack<>, um das Zahlenstapel zu erstellen.

Hier ist ein Beispiel:

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

Also dann:

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