我试图用包含45个数字的Enumerable.Range列表中的6个随机数填充2维数组的每一行。每次将6个数字输入到数组的特定行中,它们将从列表中删除。问题是数组的每一行都使用相同的列表,直到没有数字为止。如何重置每行的列表?
这是我到目前为止所做的:
static void InitMatrix(int[,] mat)
{
List<int> numbers = Enumerable.Range(1, 45).ToList();
Random rnd = new Random();
for (int i = 0; i < mat.GetLength(0); i++)
{
if(mat.GetLength(0)< mat.GetLength(1))
for (int j = 0; j < mat.GetLength(1); j++)
{
int index = rnd.Next(0, numbers.Count );
mat[i, j] = numbers[index];
numbers.RemoveAt(index);
}
}
}
答案 0 :(得分:1)
您正在声明for循环之外的数字列表。这意味着它不会在每一行之后重新启动。
static void InitMatrix(int[,] mat) {
Random rnd = new Random();
for (int i = 0; i < mat.GetLength(0); i++)
{
if(mat.GetLength(0)< mat.GetLength(1))
{
List<int> numbers = Enumerable.Range(1, 45).ToList();
for (int j = 0; j < mat.GetLength(1); j++)
{
int index = rnd.Next(0, numbers.Count );
mat[i, j] = numbers[index];
numbers.RemoveAt(index);
}
}
}
}
代码未经测试,但应该可以使用。
答案 1 :(得分:1)
将列表声明移动到第一个(行)循环下面。这样,无论何时循环移动到下一行,如果您将...
重新初始化/刷新列表static void InitMatrix(int[,] mat)
{
Random rnd = new Random();
for (int i = 0; i < mat.GetLength(0); i++)
{
List<int> numbers = Enumerable.Range(1, 45).ToList();
if(mat.GetLength(0)< mat.GetLength(1))
{
for (int j = 0; j < mat.GetLength(1); j++)
{
int index = rnd.Next(0, numbers.Count );
mat[i, j] = numbers[index];
numbers.RemoveAt(index);
}
}
}
}