C# :: Aufgabe #9
10 Lösungen

Listeninhalt zufällig anordnen
Anfänger - C#
von pocki
- 27.08.2012 um 20:49 Uhr
Erstelle eine Methode welche die Einträge (vom beliebigen Typ) einer Liste in zufälliger Reihenfolge anordnet. Die zufällige Anordnung soll in einer neu erstellten Liste zurückgegeben werden.
Lösungen:
Diese Methode vertauscht den letzten Eintrag mit einem zufälligen vorherigen Eintrag. Danach den vorletzten Eintrag wieder mit einem zufälligen davor usw.
C#-Code

public static IList<T> ShuffleSimple<T>(this IList<T> sortedList) { List<T> list = sortedList; Random rng = new Random(); int n = list.Count; while (n > 1) { n--; int k = rng.Next(n+1); T value = list[k]; list[k] = list[n]; list[n] = value; } return list; }

List<T> f<T>(List<T> l) { Random r = new Random(); for (int i = 0; i < l.Count; i++ ) { int j = r.Next(i + 1); T value = l[j]; l[j] = l[i]; l[i] = value; } return l; }

public static List<T> ListeMischen<T>(List<T> list) { int index; Random rnd = new Random(); List<T> neueListe = new List<T>(); while (list.Count != 0) { index = rnd.Next(0, list.Count); neueListe.Add(list[index]); list.Remove(list[index]); } return neueListe; }
nur der Trick:
C#-Code
komplettes Programm dazu mit Ausgabe:
C#-Code

Random rng = new Random(); var something = liste.OrderBy(a => rng.Next()); liste = something.ToList<String>();
komplettes Programm dazu mit Ausgabe:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Uebung09 { class Program { static void Main(string[] args) { List<string> liste = new List<string>(); liste.Add("Hallo"); liste.Add("Welt"); liste.Add("Peter"); liste.Add("Pan"); liste.Add("object"); liste.Add("orientation"); writeIt(liste); Random rng = new Random(); var something = liste.OrderBy(a => rng.Next()); liste = something.ToList<String>(); writeIt(liste); Console.ReadLine(); } public static void writeIt(List<String> liste) { foreach (String s in liste) { Console.WriteLine(s); } Console.WriteLine("....."); } } }

static List<string> Shuffle(List<string> array2shuffle) { List<string> templist = new List<string>(); Random rand = new Random(); int index = 0; while(array2.Shuffle.Count > 0) { index = rand.Next(0, array2.Shuffle.Count); templist.Add(array2shuffle[index]); array2shuffle.RemoveAt(index); } return templist; }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { List<int> list = new List<int>() { 1,2,3,4,5,6,7,8,9,10 }; List<int> randomizedList = Fisher_Yates_Shuffle<int>(list); foreach (var i in randomizedList) { Console.Write("{0} ", i); } Console.Read(); } static List<T> Fisher_Yates_Shuffle<T>(List<T> list) { //Check Google for Fisher-Yates shuffle to get further information about this algorithm. T temp; Random r = new Random(); int n = list.Count; while (n > 1) { int x = r.Next(n); n--; temp = list[n]; list[n] = list[x]; list[x] = temp; } return list; } } }

namespace training_aufgabe9 { class Program { static void Main(string[] args) { // Erstellung eines Liste mit 5 Einträgen A-B-C-D-E: List<string> l = new List<string>(); l.Add("A"); l.Add("B"); l.Add("C"); l.Add("D"); l.Add("E"); // Konsolenausgabe der Liste vor dem Mischen Console.WriteLine("Liste ohne Mischen:"); Console.WriteLine("-------------------"); for (int i = 0; i < l.Count; i++) { Console.WriteLine(l[i]); } Console.WriteLine("-------------------"); // Methodeaufruf & Speicherung in neuer Liste: List<string> l2 = new List<string>(); l2 = mischen(l); // Konsolenausgabe der Liste nach dem Mischen: Console.WriteLine("Liste nach dem Mischen:"); Console.WriteLine("-------------------"); for (int i = 0; i < l2.Count; i++) { Console.WriteLine(l2[i]); } Console.WriteLine("-------------------"); Console.Read(); } private static List<string> mischen(List<string> l) { // Ursprungsliste: List<string> ursprungsListe = new List<string>(); ursprungsListe = l; // Zufallsziffer Random r = new Random(); // Neue Liste (gemischt): List<string> gemischt = new List<string>(); // Normale Länge der zu mischenden Liste int listLength = l.Count; // Vermischungs-Prozess for (int i = ursprungsListe.Count; i > 0; i--) { int zufallszahl = r.Next(0, i); gemischt.Add(ursprungsListe[zufallszahl]); ursprungsListe.RemoveAt(zufallszahl); } return gemischt; } } }
Kurz, knackig und schnell zu erfassen.
C#-Code

private static IList<T> Shuffle<T>(this IEnumerable<T> list) => list.OrderBy(x => new Random().Next()).ToList();

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TrainYourProgrammer9 { public partial class Form1 : Form { public Form1() { InitializeComponent(); Random random = new Random(); int[] array = new int[listBox1.Items.Count]; for (int i = 0; i < listBox1.Items.Count; i++) { int zeiger = random.Next(1, listBox1.Items.Count+1); if (Array.IndexOf(array, zeiger) < 0) { array[i] = zeiger; listBox2.Items.Add(listBox1.Items[zeiger-1]); } else { i--; } } } } }

static IList<T> Mischen<T>(IList<T> Liste) { for (int i = Liste.Count; i > 0; i--) { int j = new Random().Next(i); Liste.Add(Liste[j]); Liste.RemoveAt(j); } return Liste; }