当使用奇数立方 3d 数组(3x3x3、5x5x5、7x7x7 等)时,在给定切片定向轴和值的情况下,返回该数组的 2d 切片的最有效方法是什么用于确定切片沿该轴的相关位置?
最佳答案
我认为您可以做出三个选项的选择,具体取决于您希望切片方法的输入和输出:
- 切片适用于原始多维 Java 数组,生成原始多维 Java 数组,例如:
int[][] ArrayUtils.slice(int[][][]立方体,int轴,int sliceIndex)
- 切片适用于原始多维 Java 数组,生成带有 getter 的对象,例如:
SomeKindOf2DimArrayClass ArrayUtils.slice(int[][][]立方体,int轴,int sliceIndex)
- 切片使用非原始数组作为输入和输出,并且是此类的方法:
SomeKindOf2DimArrayClass slice(int axis, int sliceIndex)
这就是您的界面所关心的。
在实现方面,如果您使用原始数组,那么您没有太多选择,只能做一些“繁重的工作” - 为 siice 构建一个二维数组 - 至少对于第三轴。对于第一个轴,您只需采用一个二维数组(即 result = Arrays.copyOf(cube[sliceIndex])
,或者如果您感觉轻松,甚至可以使用引用);对于第二个轴,你会得到类似的东西
for(int i=0; i<cube.length; i++) {
myAllocated2dArray[i] = Arrays.copyOf(cube[i][sliceindex])
}
如果您使用对象,您有很多选择,从我刚刚描述的内容到 @Aquillo 在 his answer 中建议的内容这里,使用 getter 方法对原始数组进行 O(1) 空间包装。
通过阅读 C language FAQs 中有关类似问题的答案,您可能会获得有关已建议的两种实现的一些灵感。 ,其中指针(引用)的使用是明确的:
关于Java 3D数组: Storing cube,检索立方体切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992076/