具有1000个元素(1to1000)的整数数组,以随机顺序排列

时间:2014-07-24 12:48:33

标签: .net arrays function random integer

编程新手 我想写一个函数,它返回一个整数数组,其中1000个元素按随机顺序包含值1到1000。

private static void RandomNum()
    {
        //Initialize an array
        int[] randomList = new int[1000];
        //Initialize an instance of random class
        Random rnd = new Random();
        // integer variable
        int counter = 0;



            while (counter < 1000)
            {
                //store random num 
                int random = rnd.Next(1, 1001);


                if (Array.IndexOf(randomList, random) <= 0)
                {
                    //store random number into Array
                    randomList[counter] = random;
                    counter++;
                }

            }


        //output elements in Array
        for (int i = 0; i < 1000; i++)
        {
            Console.WriteLine(randomList[i]);
        }
        //output number of elements in Array
        Console.WriteLine(counter);
        Console.Read();
    }

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

检查数组random中是否存在rnd.Next(1, 1001)生成的randomList个数字。如果它不存在,则将其存储在randomList指定的索引中的数组counter中。

如果您想生成一些随机排序,可以使用一点LINQ:

private static void RandomNum()
{
    Random rnd = new Random();
    var randomList = Enumerable.Range(1,1000)
        .OrderBy(x=>rnd.Next(1,1000))
        .ToArray();

    foreach(var item in randomList)
    {
        Console.WriteLine(item);
    }
    //output number of elements in Array
    Console.WriteLine(randomList.Count());
    Console.Read();
}

答案 1 :(得分:2)

一个懒惰的人随机排序的方法就是:

Enumerable.Range(1, 1000).OrderBy(x=>System.Guid.NewGuid());

它不一定是良好随机化,但随机。

另一种更随机,但空间/时间要求稍高的方式是:

var rnd = new Random();
var numbers = Enumerable.Range(1, 1000).ToList();
var randomizedNumbers = new List<int>();
while (numbers.Count > 0)
{
    var removeIndex = rnd.Next(0, numbers.Count - 1);
    var number = numbers[removeIndex];
    randomizedNumbers.Add(number);
    numbers.RemoveAt(removeIndex);
}

这只是不断地从第一个列表中提取一个随机数并将其放入一个新的集合中,直到第一个列表为空。

或者,正如其他人所说,最佳方式是使用Fisher-Yates shuffle