相关疑难解决方法(0)

C#中多维数组和数组数组之间有什么区别?

C#中多维数组double[,]和数组数组之间有什么区别double[][]?

如果有差异,每个人的最佳用途是什么?

c# jagged-arrays multidimensional-array

437
推荐指数
7
解决办法
13万
查看次数

为什么.NET中的多维数组比普通数组慢?

编辑:我向大家道歉.我实际上想要说"多维数组"时使用了"锯齿状数组"一词(如下面的例子所示).我为使用错误的名字道歉.我实际上发现锯齿状阵列比多维阵列更快!我已经为锯齿状阵列添加了测量值.

我试图用一个 盘陀今天的多维数组,当我注意到它的性能并不像我预期的那样.使用单维数组和手动计算索引要比使用2D数组快得多(几乎两倍).我使用1024*1024数组(初始化为随机值)编写了一个测试 ,进行了1000次迭代,我在我的机器上得到了以下结果:

sum(double[], int): 2738 ms (100%)
sum(double[,]):     5019 ms (183%)
sum(double[][]):    2540 ms ( 93%)
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

public static double sum(double[] d, int l1) {
    // assuming the array is rectangular
    double sum = 0;
    int l2 = d.Length / l1;
    for (int i = 0; i < l1; ++i)
        for (int j = 0; j < l2; ++j)
            sum += d[i * l2 + j];
    return sum;
}

public static double sum(double[,] d) …
Run Code Online (Sandbox Code Playgroud)

.net arrays performance

49
推荐指数
3
解决办法
2万
查看次数

3D阵列(1D平面)索引

我使用坐标系x(宽度),y(高度),z(深度)

只是为了清除混淆,如果有任何x和y是一个平面,我使用Z作为高程.

我将每秒访问数组数百万次,并且基准测试显示使用索引的一维数组更快,我想尽可能多地挤压效率,以便其他东西可以使用那个时间

例如,2D阵列 - > 1D阵列创建就是

Object[] oneDArray = new Object[width * height]
Run Code Online (Sandbox Code Playgroud)

并索引数组我可以使用以下.

Object obj = oneDArray[x + y * width]
Run Code Online (Sandbox Code Playgroud)

我确实在stackoverflow上找到了以下内容,但我不完全确定哪一个是正确的 如何在一维数组中"展平"或"索引"3D数组?

"正确"答案表示索引数组执行以下操作

Object[] oneDArray = new Object[width * height * depth]
Object obj = oneDArray[x + WIDTH * (y + DEPTH * z)]
Run Code Online (Sandbox Code Playgroud)

但另一个答案是说"正确"答案是错误的,并使用以下内容

Object[] oneDArray = new Object[width * height * depth]
Object obj = oneDArray[x + HEIGHT* (y + WIDTH* z)]
Run Code Online (Sandbox Code Playgroud)

读取扁平3D阵列的正确方法是什么?

java arrays 3d flatten multidimensional-array

5
推荐指数
2
解决办法
6314
查看次数