首页 / C# / 如何获取3维数组C#的横截面
如何获取3维数组C#的横截面
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何获取3维数组C#的横截面,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2672字,纯文字阅读大概需要4分钟。
内容图文
假设您在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
}
}
}
}
这些尝试都陷入了死胡同.您将如何解决?对于space [,,]的维数有固定的迭代循环是可以的.如果尺寸数量增加,则可以管理.明智/有限的陈述是否可行,但每个维度的陈述是否过多.
解决方法:
快速草稿:
static int[,] GetSlice(int[,,] source, int dimension, int position)
{
int l1 = 0, l2 = 0;
if (dimension == 0)
{
l1 = source.GetLength(1);
l2 = source.GetLength(2);
}
else if (dimension == 1)
{
l1 = source.GetLength(0);
l2 = source.GetLength(2);
}
else if (dimension == 2)
{
l1 = source.GetLength(0);
l2 = source.GetLength(1);
}
var result = new int[l1, l2];
var s0 = dimension == 0 ? position : 0;
var s1 = dimension == 1 ? position : 0;
var s2 = dimension == 2 ? position : 0;
var m0 = dimension == 0 ? position + 1 : source.GetLength(0);
var m1 = dimension == 1 ? position + 1 : source.GetLength(1);
var m2 = dimension == 2 ? position + 1 : source.GetLength(2);
for (var i0 = s0; i0 < m0; i0++)
for (var i1 = s1; i1 < m1; i1++)
for (var i2 = s2; i2 < m2; i2++)
{
int x = 0, y = 0;
if (dimension == 0)
{
x = i1;
y = i2;
}
else if (dimension == 1)
{
x = i0;
y = i2;
}
else if (dimension == 2)
{
x = i0;
y = i1;
}
result[x, y] = source[i0, i1, i2];
}
return result;
}
它可以推广到任意数量的维度(甚至可以使代码更小,更简单).
内容总结
以上是互联网集市为您收集整理的如何获取3维数组C#的横截面全部内容,希望文章能够帮你解决如何获取3维数组C#的横截面所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。