如何使用Enumerable.Range list c#中的随机数填充二维数组行

时间:2015-04-18 14:24:02

标签: c# arrays enumerable

我试图用包含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);
        }
    }
}

2 个答案:

答案 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);
           }
        }
    }
}