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