在 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
類生成隨機整數索引。
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