【发布时间】:2018-08-31 21:08:00
【问题描述】:
有一个 9*9 的网格,我想把它分成 9 个 3*3 的网格。
char[][] grid = new[]
{
new[] {'.', '.', '.', '1', '4', '.', '.', '2', '.'},
new[] {'.', '.', '6', '.', '.', '.', '.', '.', '.'},
new[] {'.', '.', '.', '.', '.', '.', '.', '.', '.'},
new[] {'.', '.', '1', '.', '.', '.', '.', '.', '.'},
new[] {'.', '6', '7', '.', '.', '.', '.', '.', '9'},
new[] {'.', '.', '.', '.', '.', '.', '8', '1', '.'},
new[] {'.', '3', '.', '.', '.', '.', '.', '.', '6'},
new[] {'.', '.', '.', '.', '.', '7', '.', '.', '.'},
new[] {'.', '.', '.', '5', '.', '.', '.', '7', '.'}
};
这是我的有效解决方案:
List<char[][]> myList = new List<char[][]>();
for (int i = 0; i < 9; i = i + 3)
{
for (int j = 0; j < 9; j = j + 3)
{
List<char[]> temp1 = new List<char[]>();
for (int k = 0; k < 3; k++)
{
List<char> temp2 = new List<char>();
for (int l = 0; l < 3; l++)
{
temp2.Add(grid[i + k][j + l]);
}
temp1.Add(temp2.ToArray());
}
myList.Add(temp1.ToArray());
}
}
寻找更简单的方法,特别是 Linq 解决方案。尽管它没有这个效率那么高。在这种情况下,更少的代码行更重要。
【问题讨论】:
-
您可以使用
i % 3 == 0获取每三个元素,并在两个循环中完成所有操作。一个循环遍历每个数组,一个检查它是否是第三个元素并相应地拆分。 -
您对要“拆分”数组的位置有偏好吗?