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

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

n_babajanyan profile image Narek Babajanyan ・1 min read

Նախկինում ուսումնասիրել ենք 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

Ամփոփում

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

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

Posted on by:

n_babajanyan profile

Narek Babajanyan

@n_babajanyan

Software developer on a mission.

Discussion

pic
Editor guide