DEV Community

Cover image for Սովորում ենք C# | Զանգվածներ
Narek Babajanyan
Narek Babajanyan

Posted on

Սովորում ենք C# | Զանգվածներ

Նախկինում ուսումնասիրել ենք C#-ում տվյալների պահպանման համար նախատեսված գործիքակազմը՝ ի դեմս պարզագույն տիպերի փոփոխականների։ Այժմ ժամանակն է ծանոթանալ ինֆորմատիկայի մեջ լայն կիրառություն ունեցող մեկ այլ գործիքի՝ զանգվածների։

Զանգվածն (array) իրենից ներկայացնում է նույն անվան տակ խմբավորված փոփոխականների հավաքածու։ Այն հնարավորություն է տալիս հիշողության մեջ պահել նույն տիպի ցանկացած քանակի փոփոխական՝ դրանք հասցեավորելով հերթական համարներով։

Եթե մեզ հարկավոր է պահել տասը անուն, հնարավոր է հայտարարել տասը արանձին փոփոխական և դրանց տալ համապատասխան արժեքներ՝

string str1 = "Alpha";
string str2 = "Bravo";
string str3 = "Charlie";
string str4 = "Delta";
// և այլն․․․
Enter fullscreen mode Exit fullscreen mode

Սակայն այս մեթոդն այնքան էլ արդյունավետ չէ՝ որոշ դեպքերում մեզ կարող են պետք գալ շատ մեծ թվով կամ նույնիսկ անհայտ քանակով փոփոխականներ։ Զանգվածների կիրառմամբ նույն խնդրի լուծումը կունենա հետևյալ տեսքը՝


// Զանգվածի հայտարարումը նման է փոփոխականի հայտարարմանը
// Ավելացվում է միայն [] փակագծերի զույգը
// 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"}
Enter fullscreen mode Exit fullscreen mode

Զանգված հայտարարելիս ձևավոր փակագծերի ներսում արժեքների նշումը կոչվում է զանգվածի սկզբնական արժեվորում (initialization)։ Եթե մեզ դեռևս հայտնի չեն սկզբնական արժեքները, կարելի է փոխարենը զանգվածը հայտարարել միայն տիպը և չափը նշելով։

float numbers[] = new float[10];
string names[] = new string[100];
Enter fullscreen mode Exit fullscreen mode

Զանգվածը կարելի է հայտարարել նաև նշելով և՛ երկարությունը, և՛ տարրերը։

int numbers[] = new int[5] {0, 13, -4, 24, 6};
Enter fullscreen mode Exit fullscreen mode

Կոնկրետ չափով զանգված ստեղծելիս հարկավոր է հաշվի առնել, որ քանակը հաշվվում է 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";

Enter fullscreen mode Exit fullscreen mode

Հարկ է նշել, որ բազմաչափ զանգվածները լինում են երկու տեսակի՝

  • Ուղղանկյուն զանգվածներ (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} }
}
Enter fullscreen mode Exit fullscreen mode

Զանգվածների հիմնական հատկություններից մեզ հաճախ հետարքրքում է նրա երկարությունը (տարողունակությունը), որը պահվում է զանգվածի Length դաշտում (թե ինչ է օբյեկտի դաշտը, կտեսնենք օբյեկտ-կողմնորոշված ծրագրավորում և կլասսներ ուսումնասիրելիս)։

int[] numbers = new int[5];
// numbers.Length արտահայտությունը կվերադարձնի 5

int[,] numbers = new int[3, 4];
// numbers.Length-ը կվերադարձնի 12
Enter fullscreen mode Exit fullscreen mode

Ամփոփում

Այս անգամ ծանոթացանք զանգվածների հետ։

  • Հասկացանք դրանց կիրառությունը
  • Աշխատեցինք միաչափ և բազմաչափ զանգվածների հետ
  • Սովորեցինք դրանց հայտարարման և սկզբնական արժեվորման հնարավոր գրելաձևերը
  • Հասկացանք բազմաչափ զանգվածների տեսակները և դրանց տարբերությունը

Top comments (0)