Mescola un array in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Mescola un array con la classe Random in C#
  2. Mescolare un array con la classe RNGCryptoServiceProvider in C#
Mescola un array in C#

Questo tutorial discuterà i metodi per mescolare un array in C#.

Mescola un array con la classe Random in C#

La classe Random genera numeri casuali in C#. Il metodo Random.Next() genera un valore intero casuale. Possiamo usare il metodo Random.Next() con LINQ per mescolare un array in 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);
      }
    }
  }
}

Produzione:

3 4 5 1 2

Nel codice precedente, abbiamo mescolato l’array di interi arr con il metodo Random.Next() e LINQ in C#. Abbiamo prima generato un indice casuale con il metodo Random.Next() e posizionato ogni elemento in un indice casuale con il metodo OrderBy(). Abbiamo quindi convertito la struttura dati risultante in un array con il metodo ToArray().

Mescolare un array con la classe RNGCryptoServiceProvider in C#

La classe RNGCryptoServiceProvider in C# genera numeri casuali. Questo metodo è più affidabile dell’approccio precedente perché la classe RNGCryptoServiceProvider è più casuale della classe Random. La classe RNGCryptoServiceProvider viene utilizzata principalmente per la crittografia, quindi è più sicura della classe Random. Il metodo GetBytes() della classe RNGCryptoServiceProvider viene utilizzato per riempire un array di byte con una sequenza di valori casuali. Possiamo usare il metodo Convert.ToInt32() per convertire questo valore di byte casuale in un numero intero. Possiamo quindi utilizzare questo numero intero casuale come indice per ogni elemento. Il seguente esempio di codice ci mostra come possiamo mescolare un array con la classe RNGCryptoServiceProvider in 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);
      }
    }
  }
}

Produzione:

5 1 2 4 3

La logica seguita in questo esempio è la stessa dell’approccio precedente. La differenza è che qui stiamo usando la classe RNGCryptoServiceProvider per generare un indice casuale per il nostro array. Abbiamo definito il metodo Next() che genera un indice intero casuale utilizzando la 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

Articolo correlato - Csharp Array