[英]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.