Mische eine Liste in C#

Muhammad Maisam Abbas 16 Februar 2024
  1. Mische eine Liste mit Linq in C#
  2. Mische eine Liste mit dem Fisher-Yates-Shuffle-Algorithmus in C#
Mische eine Liste in C#

In diesem Tutorial werden Methoden zum Mischen einer Liste in C# erläutert.

Mische eine Liste mit Linq in C#

Die sprachintegrierte Abfrage oder Linq bietet eine Möglichkeit, die Fähigkeit von Abfragen in C# zu integrieren. Der Linq bietet Funktionen wie SQL in C#. Wir können Linq verwenden, um eine Liste zufällig zu sortieren. Das folgende Codebeispiel zeigt uns, wie wir eine Liste mit Linq in C# mischen können.

using System;
using System.Collections.Generic;
using System.Linq;

namespace shuffle_list {
  class Program {
    static void Main(string[] args) {
      List<int> list1 = new List<int>() { 1, 2, 3, 4, 5 };

      var rnd = new Random();
      var randomized = list1.OrderBy(item => rnd.Next());

      foreach (var value in randomized) {
        Console.WriteLine(value);
      }
    }
  }
}

Ausgabe:

1
4
5
3
2

Wir haben zuerst die Liste list1 initialisiert und dann die Liste list1 mit der Funktion random.next() und der Funktion OrderBy() von Linq in C# gemischt. Die obige Methode kann auch verwendet werden, um eine Liste von Objekten in C# zu mischen. Das folgende Codebeispiel zeigt, wie eine Liste von Objekten mit Linq in C# gemischt wird.

using System;
using System.Collections.Generic;
using System.Linq;

namespace shuffle_list {
  public class Person {
    string name;
    public Person(string name) {
      Name = name;
    }
    public string Name {
      get => name;
      set => name = value;
    }
  }
  class Program {
    static void Main(string[] args) {
      List<Person> list1 = new List<Person>();

      list1.Add(new Person("Person 1"));
      list1.Add(new Person("Person 2"));
      list1.Add(new Person("Person 3"));
      list1.Add(new Person("Person 4"));
      list1.Add(new Person("Person 5"));

      var rnd = new Random();
      var randomized = list1.OrderBy(item => rnd.Next());

      foreach (var value in randomized) {
        Console.WriteLine(value.Name);
      }
    }
  }
}

Ausgabe:

Person 5
Person 2
Person 1
Person 3
Person 4

Wir haben eine Liste von Objekten der Klasse Person mit dem Linq in C# gemischt.

Mische eine Liste mit dem Fisher-Yates-Shuffle-Algorithmus in C#

Der Fisher-Yates-Shuffle-Algorithmus mischt eine endliche Datenstruktur in C#. Der Fisher-Yates-Shuffle-Algorithmus bietet ein unvoreingenommenes Mischen in C#. Es speichert nacheinander jedes Element der Liste in einem zufälligen Index innerhalb der Liste. Das folgende Codierungsbeispiel zeigt, wie eine Liste mit dem Fisher-Yates-Zufallsalgorithmus in C# gemischt wird.

using System;
using System.Collections.Generic;
using System.Linq;

namespace shuffle_list {
  static class ExtensionsClass {
    private static Random rng = new Random();

    public static void Shuffle<T>(this IList<T> list) {
      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;
      }
    }
  }

  class Program {
    static void Main(string[] args) {
      List<int> list1 = new List<int>() { 1, 2, 3, 4, 5 };

      list1.Shuffle();

      foreach (var value in list1) {
        Console.WriteLine(value);
      }
    }
  }
}

Ausgabe:

5
1
4
3
2

Wir haben eine Liste von ganzen Zahlen list1 mit dem Fisher-Yates-Shuffle-Algorithmus in C# gemischt. Wir haben eine Erweiterungsmethode zur Implementierung des Fisher-Yates-Algorithmus in C# erstellt. Um eine Erweiterungsmethode zu erstellen, mussten wir die Funktion Shuffle() in einer anderen statischen Klasse definieren, die als ExtensionClass bezeichnet wird. Der gleiche Algorithmus kann auch zum Mischen einer Liste von Objekten verwendet werden, wie in den folgenden Codes gezeigt.

using System;
using System.Collections.Generic;
using System.Linq;

namespace shuffle_list {

  public class Person {
    string name;
    public Person(string name) {
      Name = name;
    }
    public string Name {
      get => name;
      set => name = value;
    }
  }

  static class ExtensionsClass {
    private static Random rng = new Random();

    public static void Shuffle<T>(this IList<T> list) {
      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;
      }
    }
  }

  class Program {
    static void Main(string[] args) {
      List<Person> list1 = new List<Person>();

      list1.Add(new Person("Person 1"));
      list1.Add(new Person("Person 2"));
      list1.Add(new Person("Person 3"));
      list1.Add(new Person("Person 4"));
      list1.Add(new Person("Person 5"));

      list1.Shuffle();

      foreach (var value in list1) {
        Console.WriteLine(value.Name);
      }
    }
  }
}

Ausgabe:

Person 1
Person 4
Person 2
Person 5
Person 3

Wir haben eine Liste von Objekten der Klasse Person mit dem Fisher-Yates-Algorithmus in C# gemischt. Wir haben eine Erweiterungsmethode zur Implementierung des Fisher-Yates-Algorithmus in C# erstellt. Um eine Erweiterungsmethode zu erstellen, mussten wir die Funktion Shuffle() in einer anderen static Klasse definieren, die als ExtensionClass bezeichnet wird.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Csharp List