用于生成具有范围为99的随机,非重复数字的2D数组的函数

时间:2015-03-27 09:41:29

标签: c# arrays random

我需要创建一个函数,生成一个随机非重复数字的2D数组,预定义范围为1-99。

static Random RandomGenerator = new Random();

int[][] ran_array ={ 
    new int [10],
    new int [10],
    new int [10] 
};

我想在一个函数中使用2个循环来遍历每个数组,然后在数组中的每个列表添加数字,所以输出看起来像这样

static Random RandomGenerator = new Random();

int[][] ran_array ={ 
    new int [1, 3, 5, 7, 9, 2, 4, 7, 9, 10],
    new int [23, 24, 12, 53, 75, 87, 20, 12, 25, 11],
    new int [11, 54, 74, 67, 32, 87, 23, 98, 31, 1] 
};

我将如何做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用此方法:

static Random RandomGenerator = new Random();

public static int[][] GetRandomArray(int size1, int size2, int minValue, int maxValue, bool uniqueValues = false) 
{
    int[][] ran_array = new int[size1][];
    for (int i = 0; i < size1; i++)
    {
        ran_array[i] = new int[size2];
        HashSet<int> set = new HashSet<int>();
        for (int ii = 0; ii < size2; ii++)
        {
            int nextValue = RandomGenerator.Next(minValue, maxValue);
            if (uniqueValues)
            {
                while (!set.Add(nextValue))
                    nextValue = RandomGenerator.Next(minValue, maxValue);
            }
            ran_array[i][ii] = nextValue;
        }
    }
    return ran_array;
}

您的样品表明您想要这个:

int[][] ran_array = GetRandomArray(3, 10, 1, 100, true);

答案 1 :(得分:0)

在3 x 10阵列中生成随机数字集的简单解决方案:

Random rand = new Random();
var availableNumbers = Enumerable.Range(1, 99).ToList();
var result = new int[3,10];

for(int i = 0; i < 3; i++){
    for(var j = 0; j < 10; j++)
    {
        result[i,j] = availableNumbers
                       .Skip(rand.Next(0, availableNumbers.Count()))
                       .First();

        // Remove used numbers to avoid duplicates:
        availableNumbers.Remove(result[i,j]);
    }
}

也许不是最有效的解决方案,但它有效,并且相当简单。