在 C# 中隨機排列陣列

Muhammad Maisam Abbas 2023年1月30日 2021年4月29日
  1. 在 C# 中使用 Random 類對陣列進行混洗
  2. 在 C# 中使用 RNGCryptoServiceProvider 類對陣列進行混洗
在 C# 中隨機排列陣列

本教程將討論在 C# 中對陣列進行混洗的方法。

在 C# 中使用 Random 類對陣列進行混洗

Random在 C# 中生成隨機數。Random.Next() 方法生成一個隨機整數值。我們可以將 Random.Next() 方法與 LINQ 一起使用,以在 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);
            }
        }
    }
}

輸出:

3
4
5
1
2

在上面的程式碼中,我們使用 Random.Next() 方法和 C# 中的 LINQ 對整數 arr 的陣列進行了混洗。我們首先使用 Random.Next() 方法生成一個隨機索引,然後使用 OrderBy() 方法將每個元素放置在隨機索引處。然後,使用 ToArray() 方法將結果資料結構轉換為陣列。

在 C# 中使用 RNGCryptoServiceProvider 類對陣列進行混洗

C# 中的 RNGCryptoServiceProvider生成隨機數。此方法比以前的方法更可靠,因為 RNGCryptoServiceProvider 類比 Random 類更隨機。RNGCryptoServiceProvider 類主要用於加密,因此它比 Random 類更安全。RNGCryptoServiceProvider 類的 GetBytes() 方法用於用隨機值序列填充位元組陣列。我們可以使用 Convert.ToInt32() 方法將該隨機位元組值轉換為整數。然後,我們可以使用此隨機整數作為每個元素的索引。以下程式碼示例向我們展示瞭如何使用 C# 中的 RNGCryptoServiceProvider 類對陣列進行混洗。

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);
            }
        }
    }
}

輸出:

5
1
2
4
3

本示例中遵循的邏輯與先前的方法相同。不同之處在於,這裡我們使用 RNGCryptoServiceProvider 類為陣列生成隨機索引。我們定義了 Next() 方法,該方法使用 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

相關文章 - Csharp Array