c# – n维数组

前端之家收集整理的这篇文章主要介绍了c# – n维数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想创建一个二维数组的二维数组.在编译时,维数n是不知道的.

我最终将数组定义为一个字典,键是一个对应于不同轴的整数的数组(所以在三维数组中,我会提供[5,2,3]来获得double(5,3).

但是,我还需要从(0,… 0)到(m1,m2,… mn)的双精度填充字典,其中m1到mn是每个轴的长度.

我最初的想法是创建嵌套for循环,但是由于我仍然不知道我需要多少(每个维度为1),我在编译时不能这样做.

我希望我以可以理解的方式提出这个问题,但请随时要求我详细说明部分内容.

解决方法

要创建一个n维数组,可以使用 Array.CreateInstance方法
Array array = Array.CreateInstance(typeof(double),5,3,8,7,32));

array.SetValue(0.5d,0);
double val1 = (double)array.GetValue(0,0);

array.SetValue(1.5d,1,6,30);
double val2 = (double)array.GetValue(1,30);

要填充数组,您可以使用Rank属性和GetLength方法返回当前维度的长度,使用几个嵌套for循环来执行O(n ^ m)算法(警告 – 未测试):

private bool Increment(Array array,int[] idxs,int dim) {
    if (dim >= array.Rank) return false;

    if (++idxs[idxs.Length-dim-1] == array.GetLength(dim)) {
        idxs[idxs.Length-dim-1] = 0;
        return Increment(array,idxs,dim+1);
    }
    return true;
}

Array array = Array.CreateInstance(typeof(double),...);
int[] idxs = new int[array.Rank];
while (Increment(array,0)) {
    array.SetValue(1d,idxs);
}

猜你在找的C#相关文章