对于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数组的最简单方法。
答案 0 :(得分:2)
允许使用多行字符串:
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();
答案 1 :(得分: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”的调用发送一个返回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();
}