So habe ich CardBase abstrakte Klasse und Ich möchte einige zufällige Kartenelemente extrahieren einige spezifische Liste ausschließen. Also habe ich das gefallen.Wie wählt man zufällige Elemente aus der Liste aus?
public List<CardBase> GetRandExclude(List<CardBase> list, int elementsCount, List<CardBase> excludeList)
{
var returnCards = from card in list
where !excludeList.Contains(card)
select card;
foreach (CardBase cd in returnCards.Take(elementsCount))
{
Debug.Log("Selected random card is "+cd.name);
}
return (List<CardBase>) returnCards.Take(elementsCount);
}
Habe ich richtig gemacht? Gibt es einen besseren Weg? Vielen Dank im Voraus.
Also änderte ich ein wenig so. Und das scheint funktioniert.
public List<CardBase> GetRandExclude(List<CardBase> list, int elementsCount, List<CardBase> excludeList)
{
var returnCards = from card in list
where !excludeList.Contains(card)
select card;
foreach (CardBase cd in returnCards.OrderBy(arg => Guid.NewGuid()).Take(elementsCount).ToList())
{
Debug.Log("Selected random card is "+cd.name);
}
return returnCards.OrderBy(arg => Guid.NewGuid()).Take(elementsCount).ToList();
}
mit Ich stelle mir vor, dass man bestimmte Ausnahmen und/oder unerwünschte Ergebnisse mit Ihrem aktuellen Ansatz bekommen. Fügen Sie daher eine kleine Beispielliste hinzu, um alle Aspekte Ihres gewünschten Ergebnisses anzuzeigen. – grek40
Ich denke, wenn Sie es zufällig machen möchten, sollten Sie die [System.Random-Klasse] (https://msdn.microsoft.com/en-us/library/system.random (v = vs .110) .aspx # Anchor_4), um eine Zufallszahl zu generieren, die Ihnen mitteilt, wie viele Nummern Sie aus den verbleibenden Listenelementen entnehmen und dieselbe Klasse verwenden sollten, um den Index für jede aus der Liste zu wählende Zahl zu generieren. – Yatin