В програмирането назъбенмасив (на английски: Jagged Array), познат още като нащърбен масив, е масив от масиви чиито елементи могат да бъдат с различна дължина.[1] При визуализиране на такъв масив, той получава назъбен вид, откъдето идва името. За разлика от назъбения масив, в езиците като C, двуизмерните масиви са винаги правоъгълни, т.е. елементите им са с равна дължина.[2]
Назъбеният масив представлява двуизмерен масив, като първоначално се декларира дължината му, т.е. колко масиви ще се съдържат като елементи на назъбения масив. След това всеки елемент се декларира като масив поотделно със съответната дължина.
В някои езици, като C#, е възможно смесване на назъбени и многомерни масиви, т.е. един назъбен масив може да съдържа като елементи двуизмерни масиви с различна дължина.[3]
В .NET Framework назъбеният масив представлява масив от масиви т.е. всеки негов ред на практика е масив, който може да има различна дължина от останалите в назъбения масив, но не може да има различна размерност.
Особено при декларирането му е, че няма една двойка скоби, както при обикновените масиви, а имаме вече две двойки такива.
Възможно е декларирането, заделянето и инициализацията на един масив от масиви да се извършва в един израз
Достъпът до елементите на масивите, които са част от назъбения е по индекс. Интересно е, че елементи на назъбения масив може да са не само едномерни масиви, но и многомерни такива.
Назъбените масиви съдържат само референции към масивите, а не самите тях. Тъй като не знае каква ще е размерността на всеки от масивите, CLR заделя само референцията за тях. Чак след като се задели памет за някой от масивите елементи на назъбения, тогава се насочва указателя към новосъздадения блок динамична памет.
Производителност (на английски: Computer performance)
Въпреки че инициализацията на назъбен масив отнема повече време, в много случаи, при обхождане, той работи по-ефективно в сравнение със стандартния многомерен масив и спестява ресурси. В специфични ситуации той може да бъде средство за оптимизация на кода.[4]
Примери
В C#, назъбени масиви се правят със следния код:[5]
int[][]c;c=newint[2][];// creates 2 rowsc[0]=newint[5];// 5 columns for row 0c[1]=newint[3];// create 3 columns for row 1
В Java назъбени масиви се правят по подобен начин, както в C#:[6]
В Python, назъбените масиви не са имплементирани, но могат да бъдат симулирани със списъци (на английски: List), за да се създаде многомерен списък, който поддържа различни многомерни матрици.
classPascalTriangle{staticvoidMain(){constintHEIGHT=12;// Allocate the array in a triangle formlong[][]triangle=newlong[HEIGHT+1][];for(introw=0;row<HEIGHT;row++){triangle[row]=newlong[row+1];}// Calculate the Pascal's triangletriangle[0][0]=1;for(introw=0;row<HEIGHT–1;row++){for(intcol=0;col<=row;col++){triangle[row+1][col]+=triangle[row][col];triangle[row+1][col+1]+=triangle[row][col];}}// Print the Pascal's trianglefor(introw=0;row<HEIGHT;row++){Console.Write("".PadLeft((HEIGHT–row)*2));for(intcol=0;col<=row;col++){Console.Write("{0,3} ",triangle[row][col]);}Console.WriteLine();}}}