簡體   English   中英

如何將網格轉換為2D數組

[英]how to convert a grid into a 2D array

對於Euler問題11,我想將20x20網格轉換為2D整數數組。

每行中的數字用空格分隔,行之間用返回分隔。

例如:
34 34 34 34
34 34 34 34
34 34 34 34
34 34 34 34

我認為所示的網格是一個字符串,我想復制/粘貼,然后創建一個數組; 但似乎不允許使用多行字符串。 將網格另存為文件並將其讀取到數組中會更容易嗎?
我並不是要解決問題,我只是在尋求創建數組的幫助。
我發現如何采取每一行,並轉換成使用單維陣列.Split() .Select().ToArray()

int[] rowOne = "34 34 34 34".Split(' ').Select(int.Parse).ToArray();  

我仍然是C#新手,我不確定將整個網格轉換為2D數組的最簡單方法。

允許多行字符串:

    var multilineString = @"
34 34 34
34 34 34";

之后,您可以按照建議的步驟進行操作:

string[] rows = multilineString.Split('\n');
int[] rowOne = rows[0].Split(' ').Select(int.Parse).ToArray();

要獲得二維數組:

string[] rows = multilineString.Split(
                  new[] {'\n'},
                  StringSplitOptions.RemoveEmptyEntries);

int[][] array = rows.Select(row => row
                                   .Split(' ')
                                   .Select(int.Parse)
                                   .ToArray())
                    .ToArray();

假設您的網格存儲在名為grid的字符串中

string grid = @"34 34 34 34
            34 34 34 34
            34 34 34 34
            34 34 34 34";

var myArray = grid
    .Split('\n')
    .Select(t => t.Split(' ')
                    .Where((t1) =>
                    {
                        int i = 0;
                        return int.TryParse(t1, out i);
                    })
                    .Select(int.Parse).ToArray()
            ).ToArray();

此處的代碼首先根據換行符和空格字符進行拆分。 對“ Where”的調用發送了一個返回true或false的匿名方法,它嘗試解析以查看該值是否為整數,因此僅選擇整數。

var是靜態類型的,因此無論表達式返回的內容將是myArray的類型。 這實際上發生在編譯時而不是運行時。 我們可以很容易地說int [] [] myArray = ...

測試

for (int i = 0; i < myArray.Length; i++)
{
    for (int j = 0; j < myArray[i].Length; j++)
    {
        Console.Write(myArray[i][j].ToString() + ' ');
    }
    Console.WriteLine();
}

暫無
暫無

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

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