Java中如何将[9][3][3]三维int数组按规则转换为9x9二维数组
问题描述
我有一个3维int数组array[9][3][3],希望移除主轴(而非中间轴),将其转换为2维数组arrayConvt[9][9],最终得到9x9的数组而非3x27的数组。转换规则为:将原3维数组拆分为3个等份,依次排布到arrayConvt中,注意中间数组array[i]在arrayConvt中不会保持连续,但最内层数组array[i][j]保持连续。
你也可以这样理解转换逻辑:将array看作9个3x3块的集合,需要按从左到右、从上到下的顺序重新拼接这些块。
解决方案
注释区域填写以下代码即可实现转换:
arrayConvt = new int[9][9]; // 遍历3组块,每3个块对应目标二维数组的3行 for (int blockGroup = 0; blockGroup < 3; blockGroup++) { // 遍历每个块内部的3行 for (int innerRow = 0; innerRow < 3; innerRow++) { // 计算当前要填充的目标二维数组行号 int targetRow = blockGroup * 3 + innerRow; // 遍历当前块组内的3个块,依次横向拼接 for (int blockInGroup = 0; blockInGroup < 3; blockInGroup++) { // 定位原三维数组中的对应块 int sourceBlockIndex = blockGroup * 3 + blockInGroup; // 复制块内当前行到目标行的对应位置 System.arraycopy(array[sourceBlockIndex][innerRow], 0, arrayConvt[targetRow], blockInGroup * 3, 3); } } }
逻辑说明
- 原三维数组的9个3x3块按顺序每3个分为一组,共3组,分别对应目标二维数组的前三行、中三行、后三行
- 每组内的3个块按顺序横向拼接:每个块的第0行拼接为目标组第0行,第1行拼接为目标组第1行,第2行拼接为目标组第2行
- 直接调用
System.arraycopy复制最内层连续数组,执行效率更高
内容的提问来源于stack exchange,提问作者Azmart D Gintoki
相关产品推荐
相关产品推荐

