Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最有效的遍历数组_C#_Arrays_Performance - Fatal编程技术网

C# 最有效的遍历数组

C# 最有效的遍历数组,c#,arrays,performance,C#,Arrays,Performance,可能重复: 我想知道通过数组的最快方法,在大数组中,我使用它的重要性。例如,我有: ushort[, , ,] map = new ushort[3000, 3000, 3, 3]; // [pointX, pointY, stack, lvl] for (int i = 0; i < 3000; i++) for (int j = 0; j < 3000; j++) for (int k =

可能重复:

我想知道通过数组的最快方法,在大数组中,我使用它的重要性。例如,我有:

ushort[, , ,] map = new ushort[3000, 3000, 3, 3]; // [pointX, pointY, stack, lvl]

          for (int i = 0; i < 3000; i++)
              for (int j = 0; j < 3000; j++)
                  for (int k = 0; k < 3; k++)
                      for (int l = 0; l < 3; l++)
                         map[i, j, k, l] = 45001;
ushort[,]map=新的ushort[3000,3000,3,3];//[点X、点Y、堆栈、层]
对于(int i=0;i<3000;i++)
对于(int j=0;j<3000;j++)
对于(int k=0;k<3;k++)
对于(int l=0;l<3;l++)
map[i,j,k,l]=45001;
这可能是相关的,因为它取决于这些值如何存储在内存中。那么,在这种情况下,按照-i->j->k->l或l->k->j->i的顺序来做是不是更好


另外,其他语言是否不同?

在java中如何初始化数组的方式上有很大的不同,下面是纯java代码来说明差异,您可以参考下面的代码来提高效率:

public class MutipleArray {

    public static void main(String[] args) {
        long t0 = System.currentTimeMillis();
        int [][][][] map = new int[3000][3000][3][3];
        for (int i = 0; i < 3000; i++)
            for (int j = 0; j < 3000; j++)
                for (int k = 0; k < 3; k++)
                    for (int l = 0; l < 3; l++)
                       map[i][j][k][l] = 45001;
        long t1 = System.currentTimeMillis();
        System.out.println("Time for initializing the first Array:"+(t1-t0)+"ms");

        int [][][][] map2 = new int[3][3][3000][3000];
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                for (int k = 0; k < 3000; k++)
                    for (int l = 0; l < 3000; l++)
                        map2[i][j][k][l] = 45001;
        long t2 = System.currentTimeMillis();
        System.out.println("Time for initializing the second Array:"+(t2-t1)+"ms");
    }
}

因此,我建议您在java中使用int[][]map=new int[3][3][3000][3000]来代替。

这不是java语法。:)对不起,因为我不是指任何特定的语言:)对不起,如果我误解了,但这是您要找的信息吗:?(这是针对C语言的,但在某种程度上它可能适用于任何语言;而且您的问题最初是针对几种语言的。)谢谢,这就是答案:D
Time for initializing the first Array:13570ms
Time for initializing the second Array:495ms