Mezclar una lista en C#

Muhammad Maisam Abbas 11 diciembre 2023
  1. Mezclar una lista con Linq en C#
  2. Mezclar una lista con el algoritmo aleatorio de Fisher-Yates en C#
Mezclar una lista en C#

En este tutorial, analizaremos los métodos para mezclar una lista en C#.

Mezclar una lista con Linq en C#

La consulta integrada de lenguaje o Linq proporciona una forma de integrar la capacidad de consultas en C#. Linq proporciona una funcionalidad como SQL en C#. Podemos usar Linq para aleatorizar una lista. El siguiente ejemplo de código nos muestra cómo podemos mezclar una lista con 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);
      }
    }
  }
}

Producción :

1
4
5
3
2

Primero inicializamos la lista list1 y luego mezclamos la lista list1 con la función random.next() y la función OrderBy() de Linq en C#. El método anterior también se puede utilizar para mezclar una lista de objetos en C#. El siguiente ejemplo de código nos muestra cómo mezclar una lista de objetos con 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);
      }
    }
  }
}

Producción :

Person 5
Person 2
Person 1
Person 3
Person 4

Mezclamos una lista de objetos de la clase Person con Linq en C#.

Mezclar una lista con el algoritmo aleatorio de Fisher-Yates en C#

El algoritmo aleatorio de Fisher-Yates mezcla una estructura de datos finita en C#. El algoritmo de reproducción aleatoria de Fisher-Yates proporciona una reproducción aleatoria imparcial en C#. Almacena secuencialmente cada elemento de la lista en un índice aleatorio dentro de la lista. El siguiente ejemplo de codificación nos muestra cómo mezclar una lista con el algoritmo de reproducción aleatoria de 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);
      }
    }
  }
}

Producción :

5
1
4
3
2

Mezclamos una lista de enteros list1 con el algoritmo de reproducción aleatoria de Fisher-Yates en C#. Creamos un método de extensión para implementar el algoritmo de Fisher-Yates en C#. Para crear un método de extensión, tuvimos que definir la función Shuffle() en otra clase static llamada ExtensionClass. El mismo algoritmo también se puede utilizar para mezclar una lista de objetos, como se demuestra en los códigos siguientes.

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

Producción :

Person 1
Person 4
Person 2
Person 5
Person 3

Mezclamos una lista de objetos de la clase Person con el algoritmo de Fisher-Yates en C#. Creamos un método de extensión para implementar el algoritmo de Fisher-Yates en C#. Para crear un método de extensión, tuvimos que definir la función Shuffle() en otra clase static llamada 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

Artículo relacionado - Csharp List