Embaralhar um Array em C#
-
Embaralhe um Array com a classe
Random
emC#
-
Embaralhe um array com a classe
RNGCryptoServiceProvider
emC#
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