如何创建一个不重复的随机int数列表?

本文关键字:随机 int 数列 列表 一个 何创建 创建 | 更新日期: 2023-09-27 18:12:18

int Min = 0;
int Max = 20;
int[] test2 = new int[5]; 
Random randNum = new Random();
for (int i = 0; i < test2.Length; i++)
{
    test2[i] = randNum.Next(Min, Max);
}

如何确保数组中0到20之间的数字不相同?例如,我不想在数组中有数字5的两倍。

如何使用List呢?还是数组更好?

如何创建一个不重复的随机int数列表?

创建一个长度为Max的数组,并插入从0到Max的数字。然后使用随机算法从数组中选择一个元素(可能是mod(Max-chosenElementsNumber))。从数组中删除元素后。做。

或者使用LINQ。(通过生成具有Enumerable.Range的Min和Max之间的序列):

var rnd = new Random();
var res = Enumerable.Range(Min, Max - Min + 1).OrderBy(x => rnd.Next()).ToList();

如果您想要选择特定数量的序列,可以使用Take方法。这样的:

var res = Enumerable.Range(Min, Max - Min + 1).OrderBy(x => rnd.Next()).Take(5).ToList();

您可以使用HashSet<int>,它不允许重复。

int Min = 0;
int Max = 20;
var test2 = new HashSet<int>();
Random randNum = new Random();
while(test2.Count < 5)
{
    test2.Add(randNum.Next(Min, Max));
}

你也可以随机化LINQ:

int Min = 0;
int Max = 20;
Random randNum = new Random();
var test2 = Enumerable.Range(Min, Max - Min + 1)
                      .OrderBy(x => randNum.Next())
                      .Take(5)
                      .ToArray();

如果你得到一个重复的随机数,就继续得到另一个随机数。

int Min = 0;
int Max = 20;
int[] test2 = new int[5];
Random randNum = new Random();
for (int i = 0; i < test2.Length; i++)
{
    int r;
    do
    {
        r = randNum.Next(Min, Max);
    } while (test2.Contains(r));
    test2[i] = r;
}

这是整数0到19的正常排序方法

            List<KeyValuePair<int, int>> numbers = new List<KeyValuePair<int, int>>();
            Random randNum = new Random();
            for (int i = 0; i < 20; i++)
            {
                numbers.Add(new KeyValuePair<int,int>(i, randNum.Next()) );
            }
            numbers = numbers.OrderBy(x => x.Value).ToList();
            Console.WriteLine(string.Join(",", numbers.Select(x => x.Key).ToArray()));
            Console.ReadLine();