C#中的锯齿状多维数组

时间:2014-03-19 22:36:15

标签: c# arrays multidimensional-array jagged-arrays

注意:我定义了一个“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 个答案:

答案 0 :(得分:1)

你可以这样做:

int[][,] jmArray = new int[3][,];
jmArray[0] = new int[1,2] {{3,3}};

答案 1 :(得分:1)

除非我误解你,否则更简单的方法是创建一个大小为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或您喜欢的任何内容。

答案 2 :(得分:1)

而不是复杂的数组,具有有意义名称的简单类可能会更好:

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

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