如何将网格转换为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数组的最简单方法。

如何将网格转换为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();
}