c#中的锯齿多维数组
本文关键字:数组 | 更新日期: 2023-09-27 17:51:05
注意:我将'Jagged Multidimensional'特别定义为jmArray[][,]
。
我正试图把我的头围绕这种类型的数组的使用,为了保持简单的坐标,一对整数。这个数组将用于创建一个3x3的网格,所以在我的脑海中我看到的是:
jmArray[N][X,Y]
式中N为网格切片编号,X、Y为切片坐标。所以:
jmArray[2][3,2]
意味着切片2位于坐标(3,2)
我一直在尝试为每个切片分配值,但我被困在某处…
jmArray[0][,] = new int[1,2] {{3,3}};
如果能帮助我们理解如何正确地执行此操作就太好了。
除非我误解了你,否则更简单的方法是创建一个大小为3的元组的字典。
var space = Dictionary<Tuple<int, int, int>, TPointValue>;
// Fill up space with some points
space[Tuple.Create(3,3,1)] = new TPointValue(42);
// Retrieve point from 3d space
TPointValue point3_3_1 = space[Tuple.Create(3,3,1)];
我承认,在目前的形式下,与锯齿数组相比,这种方法使平面或基线的检索变得繁琐和低效,尽管它确实使点的赋值和检索非常有效。
然而:如果你要把这个数据结构包装在你自己的类中,提供访问平面/线等的方法,你可以非常容易和有效地计算事先获得任何点集所需的键,例如。在一个平面/直线/多边形内,然后非常有效地访问这些点。
PS:注意,在一个点的值不需要是一些花哨的类型,如TPointValue
,它可以只是一个string
或float
或任何你喜欢的
您可以这样实现:
int[][,] jmArray = new int[3][,];
jmArray[0] = new int[1,2] {{3,3}};
与其使用复杂的数组,不如使用具有有意义名称的简单类:
class Slice
{
int X = 0;
int Y = 0;
public Slice()
{
}
public Slice(int _X, int _Y)
{
X = _X;
Y = _Y;
}
}
Slice[] Slices = new Slice[9];
数组的索引将是切片的位置