C# / Unity Wie shuffle ich eine Liste?

3 Antworten

Wenn man bei einer Suchmaschine eingibt: List Shuffle C#

Kommen extrem viele Antworten.

So auch diese oder ähnlich:

List<Card> Shuffle(List<Card> deck) {
     List mixList = new List<Card>();
     mixList.AddRange(deck);
     for (var i = 0; i < mixList.Count; ++i) {
      int index = Random.Range(i, mixList.Count);
      var tmp = mixList[i];
      mixList[i] = mixList[index];
      mixList[index] = tmp;
     }
   return mixList;
   }

Mögliche Schreibfehler enthalten, aber dein IDE sagt dir das dann schon.

Du kannst zusätzlich noch eine Anzahl von Shuffles mit einer nested for-loop hinzufügen.

Woher ich das weiß:Berufserfahrung

So sollte das funktionieren:

public List<Card> Shuffle()
{
  List<Card> newBank = new List<object>();
  var ids = Enumerable.Range(0, dataBank.Count).ToList();
  var rnd = new Random();
  while (ids.Count > 0)
  {
    var i = rnd.Next(ids.Count);
    newBank.Add(dataBank[ids[i]]);
    ids.RemoveAt(i);
  }
  return newBank;
}
Woher ich das weiß:Berufserfahrung – Senior-Softwaredeveloper mit 20 Jahren Berufserfahrung.

Brauchst du wirklich eine vollständig gemischte Liste oder reicht dir ein einzelnes zufälliges Element?


Haenschenklein0 
Fragesteller
 20.01.2021, 17:38

Ich will die ganze Liste einmal durchmischen, wie einen Kartenstapel vor dem Spielbeginn.

0