假设你在C#中有一个三维数组
int space[width, height, depth];
您希望实现该方法
public int[,] GetCrossSection(int position, int dimension)
'position'是指您要提取切片的 'dimension' 沿着的点。重要的是不要只使用我们处理3个维度的事实,在下面的示例中,可以通过添加if语句并假定矩阵不会超过3个维度来修复它们。
我的第一次尝试(注释的问题区域):
public int[,] GetCrossSection(int position, int dimension)
{
int[] dimensionIterationInterval = new int[] { width, height, depth };
var dims = new List<int>(dimensionIterationInterval);
dims.RemoveAt(dimension);
dimensionIterationInterval = dims.ToArray();
int[,] crossSection = new int[dimensionIterationInterval[0], dimensionIterationInterval[1]];
int[] itr = new int[2];
for (itr[0] = 0; itr[0] < dimensionIterationInterval[0]; itr[0]++)
{
for (itr[1] = 0; itr[1] < dimensionIterationInterval[1]; itr[1]++)
{
crossSection[itr[0], itr[1]] = space[?,?,?]; //Problem
}
}
}
我的第二次尝试同样徒劳无功:
public int[,] GetCrossSection(int position, int dimension)
{
int[,] dimensionIterationInterval = new int[,] { { 0, width }, { 0, height }, { 0, depth } };
dimensionIterationInterval[dimension, 0] = position;
dimensionIterationInterval[dimension, 1] = position + 1;
int[,] crossSection = new int[?,?]; //Problem
for (int x = dimensionIterationInterval[0, 0]; x < dimensionIterationInterval[0, 1]; x++)
{
for (int y = dimensionIterationInterval[1, 0]; y< dimensionIterationInterval[1, 1]; y++)
{
for (int z = dimensionIterationInterval[2, 0]; z < dimensionIterationInterval[2, 1]; z++)
{
crossSection[?, ?] = space[x, y, z]; // Problem
}
}
}
}
这两种尝试都走进了死胡同。你怎么解决呢?可以为空间的维度[,,]设置固定的迭代循环次数,如果维度数量增加,这是可以管理的。聪明/有限的if语句可能有效,但不要为每个维度使用过多的if语句。