Embaralhar um Array em C#
- 
          
            Embaralhe um Array com a classe RandomemC#
- 
          
            Embaralhe um array com a classe RNGCryptoServiceProvideremC#
 
Este tutorial discutirá os métodos para embaralhar um array em C#.
Embaralhe um Array com a classe Random em C#
    
A classe Random gera números aleatórios em C#. O método Random.Next() gera um valor inteiro aleatório. Podemos usar o método Random.Next() com LINQ para embaralhar um array em 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);
      }
    }
  }
}
Resultado:
3 4 5 1 2
No código acima, embaralhamos a matriz de inteiros arr com o método Random.Next() e LINQ em C#. Primeiro, geramos um índice aleatório com o método Random.Next() e colocamos cada elemento em um índice aleatório com o método OrderBy(). Em seguida, convertemos a estrutura de dados resultante em um array com o método ToArray().
Embaralhe um array com a classe RNGCryptoServiceProvider em C#
A classe RNGCryptoServiceProvider em C# gera números aleatórios. Este método é mais confiável do que a abordagem anterior porque a classe RNGCryptoServiceProvider é mais aleatória do que a classe Random. A classe RNGCryptoServiceProvider é usada principalmente para criptografia, por isso é mais segura do que a classe Random. O método GetBytes() da classe RNGCryptoServiceProvider é usado para preencher um array de bytes com uma sequência de valores aleatórios. Podemos usar o método Convert.ToInt32() para converter esse valor de byte aleatório em um inteiro. Podemos então usar esse inteiro aleatório como um índice para cada elemento. O exemplo de código a seguir nos mostra como podemos embaralhar um array com a classe RNGCryptoServiceProvider em 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);
      }
    }
  }
}
Resultado:
5 1 2 4 3
A lógica seguida neste exemplo é a mesma da abordagem anterior. A diferença é que aqui estamos usando a classe RNGCryptoServiceProvider para gerar um índice aleatório para nosso array. Definimos o método Next() que gera um índice inteiro aleatório usando a classe RNGCryptoServiceProvider.
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