我需要创建一个函数,生成一个随机非重复数字的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]
};
我将如何做到这一点?
答案 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]);
}
}
也许不是最有效的解决方案,但它有效,并且相当简单。