如何创建随机int数列表而不重复?

时间:2016-10-09 13:45:41

标签: c# .net

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?或阵列更好?

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

或者使用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();

答案 2 :(得分:2)

您可以使用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();

答案 3 :(得分:0)

如果您获得重复的随机数,请继续获取另一个随机数。

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

答案 4 :(得分:0)

这是排序整数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();