-1

对于欧拉问题 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# 新手,我不确定将整个网格转换为二维数组的最简单方法。

4

2 回答 2

2

允许多行字符串:

    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();
于 2013-08-16T00:23:58.863 回答
1

假设您的网格存储在一个名为 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”的调用发送一个返回真或假的匿名方法,它尝试解析以查看该值是否为整数,因此仅选择整数。

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();
}
于 2013-08-16T00:29:57.913 回答