如何用 Enumerable.Range 列表中的随机数填充二维数组的行 c#
How to fill a 2 dimensional array's row with random numbers from Enumerable.Range list c#
我试图用 Enumerable.Range 列表中的 6 个随机数填充二维数组的每一行,该列表包含 45 个数字。每次将 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);
}
}
}
您正在 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);
}
}
}
}
代码未经测试,但应该可以。
将列表声明移至第一个(行)循环下方。这样,每当循环移动到下一行时,如果您愿意,列表就会重新初始化/刷新...
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);
}
}
}
}
我试图用 Enumerable.Range 列表中的 6 个随机数填充二维数组的每一行,该列表包含 45 个数字。每次将 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);
}
}
}
您正在 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);
}
}
}
}
代码未经测试,但应该可以。
将列表声明移至第一个(行)循环下方。这样,每当循环移动到下一行时,如果您愿意,列表就会重新初始化/刷新...
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);
}
}
}
}