Նախկինում ուսումնասիրել ենք C#-ում տվյալների պահպանման համար նախատեսված գործիքակազմը՝ ի դեմս պարզագույն տիպերի փոփոխականների։ Այժմ ժամանակն է ծանոթանալ ինֆորմատիկայի մեջ լայն կիրառություն ունեցող մեկ այլ գործիքի՝ զանգվածների։
Զանգվածն (array) իրենից ներկայացնում է նույն անվան տակ խմբավորված փոփոխականների հավաքածու։ Այն հնարավորություն է տալիս հիշողության մեջ պահել նույն տիպի ցանկացած քանակի փոփոխական՝ դրանք հասցեավորելով հերթական համարներով։
Եթե մեզ հարկավոր է պահել տասը անուն, հնարավոր է հայտարարել տասը արանձին փոփոխական և դրանց տալ համապատասխան արժեքներ՝
string str1 = "Alpha";
string str2 = "Bravo";
string str3 = "Charlie";
string str4 = "Delta";
// և այլն․․․
Սակայն այս մեթոդն այնքան էլ արդյունավետ չէ՝ որոշ դեպքերում մեզ կարող են պետք գալ շատ մեծ թվով կամ նույնիսկ անհայտ քանակով փոփոխականներ։ Զանգվածների կիրառմամբ նույն խնդրի լուծումը կունենա հետևյալ տեսքը՝
// Զանգվածի հայտարարումը նման է փոփոխականի հայտարարմանը
// Ավելացվում է միայն [] փակագծերի զույգը
// int number - Integer տիպի մեկ փոփոխական
// int number[] - Integer տիպի փոփոխականների զանգված
string words[] = {"Alpha", "Bravo", "Charlie", "Delta", "Echo"} // և այլն․․․
// Զանգվածի կոնկրետ փոփոխական կարդալու կամ փոփոխելու համար
// օգտագործվում է դրա հերթական համարը (index)
// Հերթական համարները ինֆորմատիկայում սովորաբար սկսվում են 0֊ից
words[0] // Alpha
words[1] // Bravo
words[2] = "New name"
// words[] = {"Alpha", "Bravo", "New Name", "Delta", "Echo"}
words[3] = words[2];
// words[] = {"Alpha", "Bravo", "New Name", "New Name", "Echo"}
Զանգված հայտարարելիս ձևավոր փակագծերի ներսում արժեքների նշումը կոչվում է զանգվածի սկզբնական արժեվորում (initialization)։ Եթե մեզ դեռևս հայտնի չեն սկզբնական արժեքները, կարելի է փոխարենը զանգվածը հայտարարել միայն տիպը և չափը նշելով։
float numbers[] = new float[10];
string names[] = new string[100];
Զանգվածը կարելի է հայտարարել նաև նշելով և՛ երկարությունը, և՛ տարրերը։
int numbers[] = new int[5] {0, 13, -4, 24, 6};
Կոնկրետ չափով զանգված ստեղծելիս հարկավոր է հաշվի առնել, որ քանակը հաշվվում է 1-ից, իսկ հերթական համարները՝ 0-ից։ Այսինքն, int numbers[] = new int[10];
հրամանով ստեղծված զանգվածը սկսվում է numbers[0]
-ից և ավարտվում numbers[9]
-ով (տարրերի ընդհանուր քանակը՝ 10)։
Զանգվածի սահմաններից դուրս գտնվող հերթական համար օգտագործելու դեպքում ծրագիրը կհանգի IndexOutOfRangeException
կոչվող սխալի (Exception-ներին և դրանց տեսակներին կանդրադառնանք ավելի ուշ)։
Բազմաչափ զանգվածներ
Որոշ խնդիրների լուծման ժամանակ անհրաժեշտ է լինում օգտվել հերթական համարներով տվյալներ հայթայթելու և պահպանելու հարմարությունից, սակայն մեկ չափանի զանգվածները չեն բավականացնում։ Այս պարագայում օգտագործվում են բազմաչափ զանգվածներ (multi-dimensional array)։
Նման խնդրի օրինակ կարող է հանդիսանալ շախմատի տախտակի մոդելավորումը ծրագրի մեջ՝ 64 առանձին փոփոխական հայտարարելն ընդհանրապես էֆեկտիվ չէ, 8 տարր պարունակող 8 տարբեր զանգված հայտարարելը նույնպես։ Փոխարենը կարող ենք օգտագործել երկչափանի զանգված՝
// Բազմաչափ զանգված հայտարարելիս քառակուսի փակագծերում ներառվում է ստորակետ
// Ստորակետների քանակը մեկով պակաս է զանգվածի չափումների քանակից
// string[] - 1D array
// string[,] - 2D array
// string[,,] - 3D array
string[ , ] board = new string[8, 8];
board[0, 0] = "HOOK";
board[0, 1] = "KNIGHT";
board[0, 2] = "BISHOP";
Հարկ է նշել, որ բազմաչափ զանգվածները լինում են երկու տեսակի՝
- Ուղղանկյուն զանգվածներ (rectangular array)
- Անհարթ զանգվածներ (jagged array)
Այս տեսակների տարբերությունը կայանում է հետևյալում, ուղղանկյունաձև զանգվածի շարքերը պարունակում են հավասար թվով տարրեր, մինչդեռ անհարթ զանգվածն իրենից ներկայացնում է զանգվածներով լի զանգված (այսինքն, զանգված, որի տարրերը նույնպես զանգվածներ են)։ Ընդ որում, ամեն շարք ներկայացնող զանգվածները կարող են ունենալ տարբեր թվով տարրեր։
Կախված տեսակից, փոխվում է հայտարարման գրելաձևը՝
int[,] rectNumbers = new int[5,3]; // Ուղղանկյունաձև
int[][] jaggedNumbers = new int[5][3]; // Անհարթ
// Անհարթ զանգված հայտարարելիս հնարավոր է դատարկ թողնել երկրորդ չափման երկարությունը
int [][] newJaggedArray = new int[4][];
newJaggedArray[0] = new int[1];
newJaggedArray[1] = new int[5];
newJaggedArray[2] = new int[3];
newJaggedArray[3] = new int[4];
/* Մեր անհարթ զանգվածն ունի հետևյալ տեսքը (X-ով նշված են int տիպի տարրերը)
X
X X X X X
X X X
X X X X
*/
// Անհարթ եռաչափ զանգված ստանալու համար հնարավոր է համատեղել անհարթ և ուղղանկյուն զանգվածներ
int [][,] 3dArray= new int[3][,]
{
new int[,] { {5, 2}, {0, -1} },
new int[,] { {11, 133 , 5}, {6, 7, 5} },
new int[,] { {90}, {5} }
}
Զանգվածների հիմնական հատկություններից մեզ հաճախ հետարքրքում է նրա երկարությունը (տարողունակությունը), որը պահվում է զանգվածի Length
դաշտում (թե ինչ է օբյեկտի դաշտը, կտեսնենք օբյեկտ-կողմնորոշված ծրագրավորում և կլասսներ ուսումնասիրելիս)։
int[] numbers = new int[5];
// numbers.Length արտահայտությունը կվերադարձնի 5
int[,] numbers = new int[3, 4];
// numbers.Length-ը կվերադարձնի 12
Ամփոփում
Այս անգամ ծանոթացանք զանգվածների հետ։
- Հասկացանք դրանց կիրառությունը
- Աշխատեցինք միաչափ և բազմաչափ զանգվածների հետ
- Սովորեցինք դրանց հայտարարման և սկզբնական արժեվորման հնարավոր գրելաձևերը
- Հասկացանք բազմաչափ զանգվածների տեսակները և դրանց տարբերությունը
Top comments (0)