Skip to the content.

Set տվյալների կառուցվածքը: Փորձենք համեմատել զանգվածի հետ: Ո՞ր դեպքերում այն հիանալի այլընտրանք կլինի զանգվածին:

Map տվյալների կառուցվածքին նվիրված գրառման մեջ արդեն նշել եմ, որ տվյալների կառուցվածքի ճիշտ ընտրությունը կարող է օգնել գրելու ավելի պարզ, հասկանալի և արագ աշխատող կոդ, շատ դեպքերում ազատելով բարդ կոնստրուկցիաներ կիրառելու կամ լրացուցիչ ստուգումներ կատարելու անհաժեշտությունից։ Ինչպես և Map-ը՝ Set-ը նույնպես JavaScript-ում ներդրվեց 2015 թվականին ընդունված ստանդարտով (ES6 կամ ECMAScript 2015)։

Set-ը շատ նման է մաթեմատիկայում օգտագործվող բազմություն օբյեկտին։ Նույնպես թույլ է տալիս պահպանել ունիկալ տվյալներ՝ առանց որոշակի հերթականության, միայն թե ի տարբերություն մաթեմատիկական բազմության՝ այն պարտադիր պետք է լինի վերջավոր։ Ինչպես որ Map-ը շատ նմանություններ ուներ օբյեկտի հետ, և իրականում որոշ խնդիրների լուծման մեջ հանդիսանում էր այլընտրանք օբյեկտին, այնպես էլ Set-ը ավելի շատ այլընտրանք է հանդիսանում զանգվածներին, և որոշ դեպքերում զանգվածները փոխարինելով Set-ով՝ մենք կարող ենք շահել թե՛ կոդի պարզության և թե՛ արագագործության մեջ։

Set կարող ենք ստեղծել new Set([iterable]) կոնստրուկտորի միջոցով։ Գլխավորն այն է, որ որպես արգումենտ հաղորդենք միայն իտերացվող օբյեկտներ, օրինակ՝ զանգված։

const set = new Set([2, 4, 6, 8, 2, 6]);
console.log(set); // {2, 4, 6, 8}

Set-ի մեթոդներն ու հատկություններն են՝

Set-ի էլեմենտները մենք կարող ենք հերթով արտածել, օգտագործելով ինչպես for of ցիկլը, այնպես էլ forEach մեթոդը։ Հետաքրքիրն այն է, որ forEach մեթոդի պարամետրերը նույնպես 3-ն են՝ value, valueAgain, և հենց Set-ը։ Այսինքն ստացվում է, որ արժեքն արգումենտների մեջ հայտնվում է երկու անգամ։ Սա կարող է տարօրինակ համարվել, սակայն հատուկ այդպես է արվել Map-ի հետ հնարավորինս նույնական ինտերֆեյս ունենալու համար։

Այն նաև ունի նույն ներդրված մեթոդները՝ ինչ Map-ը։

Թվարկենք Set-ի բոլոր ուժեղ կողմերը՝ համեմատած զանգվածների հետ, որոնք հատկապես կարևոր են կոդի արդյունավետության բարձրացման համար․

Նշենք, որ մեթոդները, որոնք զանգվածն օգտագործում է էլեմենտների որոնման համար, հիմնականում ունեն ալգորիթմական բարդության O(n) արժեք (գծային են): Սա նշանակում է, որ կա ուղիղ կապ զանգվածի չափի և այդ մեթոդների աշխատանքի արագության մեջ։

Ի տարբերություն զանգվածների՝ Set-ի որոնման, էլեմենտ ավելացնելու և հեռացնելու մեթոդների ալգորիթմական բարդությունը O(1) է, այսինքն հաստատուն է, և կապ չունի թե ինչ չափերի է Set-ը։ Թե՛ 10 էլեմենտ, թե 10․000 էլեմենտ ունեցող Set-ի դեպքում մեթոդներն աշխատում են հաստատուն բարդությամբ, ինչը շա՜տ մեծ առավելություն է։

Անգամ սորտավորված զանգվածների դեպքում, երբ օրինակ որոնումը կատարվում է ոչ թե գծային, այլ լոգարիթմական ժամանակում, միևնույնն է Set-ն ավելի արագ է աշխատում։