Embaralhar um Array em C#

Muhammad Maisam Abbas 16 fevereiro 2024
  1. Embaralhe um Array com a classe Random em C#
  2. Embaralhe um array com a classe RNGCryptoServiceProvider em C#
Embaralhar um Array em C#

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.

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

Artigo relacionado - Csharp Array