【发布时间】:2017-04-07 07:40:13
【问题描述】:
假设你在 c# 中有一个 3 维数组
int space[width, height, depth];
你想实现这个方法
public int[,] GetCrossSection(int position, int 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 语句可以工作,但对于每个维度都没有过多的 ifs。
【问题讨论】:
-
感谢聪明的语言特定的东西,但我也对“伪代码”之类的问题感兴趣,如果有一些结构可以用来解决我发现的问题我的两次尝试。
标签: c# arrays multidimensional-array