C# / Unity Wie shuffle ich eine Liste?
Hi,
public List<Card> dataBank = new List<Card>();
public List<Card> Shuffle() {
return <---
}
ich möchte in der Shuffle Methode gerne meine "dataBank-Liste" mischen und zurückgeben. Wie mach ich das am besten? Gibt es da eine einfache Möglichkeiten die Element in einer Liste zu mischen?
Vielen Dank
3 Antworten
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, C Sharp
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?
Ich will die ganze Liste einmal durchmischen, wie einen Kartenstapel vor dem Spielbeginn.