Mélanger une liste en C#

Muhammad Maisam Abbas 16 février 2024
  1. Mélanger une liste avec Linq en C#
  2. Mélangez une liste avec l’algorithme de lecture aléatoire de Fisher-Yates en C#
Mélanger une liste en C#

Dans ce didacticiel, nous aborderons les méthodes de lecture aléatoire d’une liste en C#.

Mélanger une liste avec Linq en C#

La requête intégrée au langage ou Linq fournit un moyen d’intégrer la capacité des requêtes en C#. Le Linq fournit des fonctionnalités tout comme SQL en C#. Nous pouvons utiliser Linq pour randomiser une liste. L’exemple de code suivant nous montre comment nous pouvons mélanger une liste avec Linq en C#.

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

Production:

1 4 5 3 2

Nous avons d’abord initialisé la liste list1 puis mélangé la liste list1 avec la fonction random.next() et la fonction OrderBy() de Linq en C#. La méthode ci-dessus peut également être utilisée pour mélanger une liste d’objets en C#. L’exemple de code suivant nous montre comment mélanger une liste d’objets avec Linq en C#.

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

Production:

Person 5 Person 2 Person 1 Person 3 Person 4

Nous avons mélangé une liste d’objets de la classe Person avec le Linq en C#.

Mélangez une liste avec l’algorithme de lecture aléatoire de Fisher-Yates en C#

L ‘algorithme de mélange de Fisher-Yates mélange une structure de données finie en C#. L’algorithme de mélange Fisher-Yates fournit un mélange non biaisé en C#. Il stocke séquentiellement chaque élément de la liste dans un index aléatoire à l’intérieur de la liste. L’exemple de codage suivant nous montre comment mélanger une liste avec l’algorithme de mélange Fisher-Yates en C#.

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

Production:

5 1 4 3 2

Nous avons mélangé une liste d’entiers list1 avec l’algorithme de mélange Fisher-Yates en C#. Nous avons créé une méthode d’extension pour implémenter l’algorithme de Fisher-Yates en C#. Pour créer une méthode d’extension, nous avons dû définir la fonction Shuffle() dans une autre classe static appelée ExtensionClass. Le même algorithme peut également être utilisé pour mélanger une liste d’objets, comme illustré dans les codes ci-dessous.

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

Production:

Person 1 Person 4 Person 2 Person 5 Person 3

Nous avons mélangé une liste d’objets de la classe Person avec l’algorithme de Fisher-Yates en C#. Nous avons créé une méthode d’extension pour implémenter l’algorithme de Fisher-Yates en C#. Pour créer une méthode d’extension, nous avons dû définir la fonction Shuffle() dans une autre classe static appelée ExtensionClass.

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

Article connexe - Csharp List