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}};

如果能帮助我们理解如何正确地执行此操作就太好了。

c#中的锯齿多维数组

除非我误解了你,否则更简单的方法是创建一个大小为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,它可以只是一个stringfloat或任何你喜欢的

您可以这样实现:

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];

数组的索引将是切片的位置