C# :: Aufgabe #9

10 Lösungen Lösungen öffentlich

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:

vote_ok
von pocki (4190 Punkte) - 27.08.2012 um 21:17 Uhr
Diese Methode vertauscht den letzten Eintrag mit einem zufälligen vorherigen Eintrag. Danach den vorletzten Eintrag wieder mit einem zufälligen davor usw.
Quellcode ausblenden 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;
}
vote_ok
von Process1 (1180 Punkte) - 15.01.2013 um 04:25 Uhr
Quellcode ausblenden C#-Code
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;
        }
vote_ok
von wladi-g (1310 Punkte) - 03.06.2014 um 16:47 Uhr
Quellcode ausblenden C#-Code
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;
        }
2x
vote_ok
von Sokard (120 Punkte) - 24.03.2015 um 22:23 Uhr
nur der Trick:
Quellcode ausblenden C#-Code
Random rng = new Random();
var something = liste.OrderBy(a => rng.Next());
liste = something.ToList<String>();


komplettes Programm dazu mit Ausgabe:
Quellcode ausblenden C#-Code
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(".....");
        }
        
    }
    
}
vote_ok
von DrizZle (360 Punkte) - 15.06.2016 um 13:39 Uhr
Quellcode ausblenden C#-Code
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;
}
vote_ok
von Shirkova (190 Punkte) - 03.07.2016 um 23:28 Uhr
Quellcode ausblenden C#-Code
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;
        }
    }
}

vote_ok
von grinchyy (200 Punkte) - 08.03.2017 um 10:46 Uhr
Quellcode ausblenden C#-Code

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;
        }
    }
}

vote_ok
von kjaenke (1140 Punkte) - 11.10.2017 um 09:51 Uhr
Kurz, knackig und schnell zu erfassen.

Quellcode ausblenden C#-Code
private static IList<T> Shuffle<T>(this IEnumerable<T> list) => list.OrderBy(x => new Random().Next()).ToList();
vote_ok
von stbehl (1640 Punkte) - 03.01.2018 um 14:26 Uhr
Quellcode ausblenden C#-Code
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--;
                }
            }
        }
    }
}
vote_ok
von Chrille (100 Punkte) - 24.10.2020 um 14:03 Uhr
Quellcode ausblenden C#-Code
        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;
        }