Mezclar un array en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Mezclar un array con la clase Random en C#
  2. Mezclar un array con la clase RNGCryptoServiceProvider en C#
Mezclar un array en C#

Este tutorial discutirá los métodos para mezclar un array en C#.

Mezclar un array con la clase Random en C#

La clase Random genera números aleatorios en C#. El método Random.Next() genera un valor entero aleatorio. Podemos usar el método Random.Next() con LINQ para mezclar un array en C#.

using System;
using System.Linq;
using System.Security.Cryptography;

namespace randomize_array {
  class Program {
    static void Main(string[] args) {
      int[] arr = { 1, 2, 3, 4, 5 };
      Random random = new Random();
      arr = arr.OrderBy(x => random.Next()).ToArray();
      foreach (var i in arr) {
        Console.WriteLine(i);
      }
    }
  }
}

Producción :

3
4
5
1
2

En el código anterior, mezclamos el array de enteros arr con el método Random.Next() y LINQ en C#. Primero generamos un índice aleatorio con el método Random.Next() y colocamos cada elemento en un índice aleatorio con el método OrderBy(). Luego convertimos la estructura de datos resultante en un array con el método ToArray().

Mezclar un array con la clase RNGCryptoServiceProvider en C#

La clase RNGCryptoServiceProvider en C# genera números aleatorios. Este método es más confiable que el enfoque anterior porque la clase RNGCryptoServiceProvider es más aleatoria que la clase Random. La clase RNGCryptoServiceProvider se utiliza principalmente para el cifrado, por lo que es más segura que la clase Random. El método GetBytes() de la clase RNGCryptoServiceProvider se utiliza para llenar un array de bytes con una secuencia de valores aleatorios. Podemos usar el método Convert.ToInt32() para convertir este valor de byte aleatorio en un entero. Luego, podemos usar este número entero aleatorio como índice para cada elemento. El siguiente ejemplo de código nos muestra cómo podemos mezclar un array con la clase RNGCryptoServiceProvider en C#.

using System;
using System.Linq;
using System.Security.Cryptography;

namespace randomize_array {
  class Program {
    static int Next(RNGCryptoServiceProvider random) {
      byte[] randomInt = new byte[4];
      random.GetBytes(randomInt);
      return Convert.ToInt32(randomInt[0]);
    }
    static void Main(string[] args) {
      int[] arr = { 1, 2, 3, 4, 5 };
      RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();
      arr = arr.OrderBy(x => Next(random)).ToArray();
      foreach (var i in arr) {
        Console.WriteLine(i);
      }
    }
  }
}

Producción :

5
1
2
4
3

La lógica que se sigue en este ejemplo es la misma que la del enfoque anterior. La diferencia es que aquí estamos usando la clase RNGCryptoServiceProvider para generar un índice aleatorio para nuestra matriz. Definimos el método Next() que genera un índice entero aleatorio utilizando la clase RNGCryptoServiceProvider.

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 Array