這個範例比較多元數組和鋸齒資料的性能差異
所謂鋸齒數組,是一種特殊的數組,即我們常說的數組的數組。
我們所使用的範例是把一年的資料用随機數填充起來
如果用多元數組的話,因為預先定義好了維的長度,是以事實上在裡面是有空的單元的。例如第二個維是31,但是有的月份可能沒有31号這一天。
鋸齒數組,在數組裡面放的還是數組,這樣每個數組的長度是可以精确控制的
經驗證明:鋸齒數組不僅在某些時候節省空間,而且可以比較顯著地提高性能。
static void main(string[] args)
{
int[,] multi = new int[12, 31];
random rnd = new random();
int[][] jagged = new int[12][];
for (int i = 0; i < 12; i++)
for (int m = 0; m < datetime.daysinmonth(datetime.now.year, i + 1) - 1; m++)
multi[i, m] = rnd.next(100);
}
}
console.writeline("開始計算多元數組于:"+datetime.now.tolongtimestring());
int sum = 0;
for (int k = 0; k < 65536; k++)
for (int i = 0; i < 12; i++)
for (int m = 0; m < datetime.daysinmonth(datetime.now.year, i + 1) - 1; m++)
sum += multi[i, m];
}
console.writeline("結束計算多元數組于:"+datetime.now.tolongtimestring()+"\n");
int days = datetime.daysinmonth(datetime.now.year, i + 1);
jagged[i] = new int[days];
for (int m = 0; m < days - 1; m++)
jagged[i][m] = rnd.next(100);
sum = 0;
console.writeline("開始計算鋸齒數組于:"+datetime.now.tolongtimestring());
int days = datetime.daysinmonth(datetime.now.year, i + 1);
for (int m = 0; m < days - 1; m++)
sum += jagged[i][m];
console.writeline("結束計算鋸齒數組于:"+datetime.now.tolongtimestring());
console.read();
}
結果如下,高下立判啊