簡體   English   中英

如何使用Enumerable.Range list C#中的隨機數填充二維數組的行

[英]How to fill a 2 dimensional array's row with random numbers from Enumerable.Range list c#

我試圖用包含45個數字的Enumerable.Range列表中的6個隨機數填充二維數組的每一行。 每次將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);
           }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM