溫馨提示×

C#中如何避免隨機(jī)數(shù)重復(fù)

c#
小樊
85
2024-08-29 05:13:33
欄目: 編程語言

在C#中,為了避免生成的隨機(jī)數(shù)重復(fù),可以使用以下方法:

  1. 使用System.Random類,并確保每次創(chuàng)建一個(gè)新的實(shí)例。這樣可以確保每次運(yùn)行程序時(shí)都會得到不同的隨機(jī)數(shù)序列。但是,在同一程序運(yùn)行期間,如果多次創(chuàng)建Random實(shí)例,可能會因?yàn)榉N子值相同而導(dǎo)致生成相同的隨機(jī)數(shù)。
Random random = new Random();
int randomNumber = random.Next();
  1. 使用System.Security.Cryptography.RNGCryptoServiceProvider類來生成加密安全的隨機(jī)數(shù)。這種方法生成的隨機(jī)數(shù)比System.Random更加隨機(jī),適用于需要高度隨機(jī)性的場景,如密碼生成等。
using System.Security.Cryptography;

byte[] randomBytes = new byte[4]; // 生成一個(gè)4字節(jié)的隨機(jī)數(shù)
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
int randomNumber = BitConverter.ToInt32(randomBytes, 0);
  1. 如果你需要在一個(gè)循環(huán)中生成不重復(fù)的隨機(jī)數(shù)序列,可以使用System.Collections.Generic.HashSet<T>來存儲已經(jīng)生成過的隨機(jī)數(shù),并在生成新的隨機(jī)數(shù)時(shí)檢查它是否已經(jīng)存在于集合中。如果存在,則重新生成。
HashSet<int> generatedNumbers = new HashSet<int>();
Random random = new Random();

for (int i = 0; i < 10; i++)
{
    int randomNumber;
    do
    {
        randomNumber = random.Next(1, 100); // 生成1到99之間的隨機(jī)數(shù)
    } while (generatedNumbers.Contains(randomNumber));

    generatedNumbers.Add(randomNumber);
    Console.WriteLine(randomNumber);
}

請注意,當(dāng)隨機(jī)數(shù)范圍較小且需要生成的數(shù)量較多時(shí),這種方法可能會導(dǎo)致性能下降,因?yàn)榭赡苄枰啻螄L試才能找到一個(gè)不重復(fù)的隨機(jī)數(shù)。在這種情況下,可以考慮使用其他方法,如預(yù)先生成一個(gè)隨機(jī)數(shù)序列并將其存儲在列表或數(shù)組中,然后在需要時(shí)按順序取出。

0