Künstliche Intelligenz
Neu in .NET 10.0 [25]: Neuer LINQ-Operator Shuffle()
Shuffle() mischt eine gegebene Menge von Objekten zufällig. Der neue Operator Shuffle() ändert die Ausgangsmenge nicht, sondern liefert das gemischte Ergebnis als IEnumerable zurück. Details finden sich im zugehörigen GitHub-Issue.
Weiterlesen nach der Anzeige
Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.
Shuffle() verwendet unter der Haube die Klasse System.Random. Die Randomisierung erfolgt also mithilfe eines nicht kryptografisch sicheren Zufallszahlengenerators.
Folgender Code nutzt den neuen Befehl Shuffle():
public void Shuffle()
{
CUI.Demo();
CUI.H2("Zufällige Mischung der Liste der Zahlen von 1 bis 20");
// Erzeuge eine Liste mit den Zahlen von 1 bis 20
var numbers = Enumerable.Range(1, 20).ToList();
CUI.H3("Ausgangslage");
// Gib die Zahlen aus
Console.WriteLine(string.Join(", ", numbers));
CUI.H3("Shuffle()");
var numbersShuffled = numbers.Shuffle();
// Gib die Zahlen aus
Console.WriteLine(string.Join(", ", numbersShuffled));
CUI.H2("Zufällige Mischung der der Wörter in einem Satz");
var satz = "Geld macht nicht glücklich";
List words = satz.Split(" ").ToList();
CUI.H3("Ausgangslage");
Console.WriteLine(string.Join(" ", words));
CUI.H3("Shuffle()");
IEnumerable wordsShuffled = words.Shuffle();
Console.WriteLine(string.Join(" ", wordsShuffled));
}
Ausgabe des Codebeispiels (Abb. 1)
Shuffle() funktioniert aber nur im RAM bei LINQ-to-Objects. Es gibt keine Übersetzung in SQL bei Entity Framework Core. Möglich ist aber, Shuffle() auf eine Objektmenge im RAM anzuwenden, auch wenn diese von Entity Framework Core materialisiert wurde:
Weiterlesen nach der Anzeige
// var flights = ctx.Flights.Where(x => x.Departure == "Berlin").Shuffle().ToList(); // "The LINQ expression ould not be translated. Additional information: 'Shuffle' could not be translated".
var flights = ctx.Flights.Where(x => x.Departure == "Berlin").ToList();
var flightsShuffled = flights.Shuffle();
(rme)