如何用 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);
           }
        }
    }
}