我想知道是否有更有效的方法在循环中选择变量。以下代码我的工作原理,但如果可能,我希望有更好的方法。
Map<Character, Character> axes = new HashMap<Character, Character>();
(...)
for (int w = 0; w < image.getWidth(); w++) {
for (int h = 0; h < image.getHeight(); h++) {
for (int d = 0; d < depth; d++) {
int x = axes.get('x') == 'w' ? w : (axes.get('x') == 'h' ? h : d);
int y = axes.get('y') == 'w' ? w : (axes.get('y') == 'h' ? h : d);
int z = axes.get('z') == 'w' ? w : (axes.get('z') == 'h' ? h : d);
(...)
}
}
}
在上面的内容中,我需要将图像的某些坐标分配给具有深度的3D坐标,但是它使用的边根据其面向的方向而改变。是否有更快的方法来执行代码而不必单独生成循环?
答案 0 :(得分:1)
您可以尝试以下内容:
int[] coords = new int[3];
int width = image.getWidth();
int height = image.getHeight();
for (coords[0] = 0; coords[0] < width; ++coords[0])
{
for (coords[1] = 0; coords[1] < height; ++coords[1])
{
for (coords[2] = 0; coords[2] < depth; ++coords[2])
{
int x = coords[x_idx];
int y = coords[y_idx];
int z = coords[z_idx];
…
}
}
}
答案 1 :(得分:0)
您可以将axes.get(...)
次呼叫移出循环。它应该足够快。如果它仍然太慢,也要在循环外部进行逻辑并在内循环中进行切换:
final char xaxis = axes.get('x');
final char yaxis = axes.get('y');
final char zaxis = axes.get('z');
final int mode = xaxis == 'x' && yaxix == 'y' ? 1 : ....
然后
switch (mode) {
case 1: x = w; y = h; z = d; break;
case 2: ...
}
// work with x,y,z