如何将网格转换为2D阵列
本文关键字:2D 阵列 转换 网格 | 更新日期: 2023-09-27 18:27:48
对于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();
获取2D阵列:
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();
}