Junior
Ինչպես է աշխատում Map տվյալների տիպը Go-ում?
sobes.tech AI
Պատասխան AI-ից
Քարտեզը — դա Go-ում « բանալին-արժեք» զույգերի անհամակարգ հավաքածու է:
Հատկանշական հատկություններ՝
- Բանալիները պետք է լինեն համեմատելի տվյալների տիպեր (համարներ, տողեր, բուլյաններ, ցուցիչներ, ալիքներ, ինտերֆեյսներ, եթե դինամիկ տիպը համեմատելի է, և զանգվածներ, եթե դրանց տարրերը համեմատելի են): Սլայսեր, ֆունկցիաներ և այլ քարտեզներ որպես բանալիներ օգտագործել չի կարելի:
- Արժեքները կարող են լինել ցանկացած տվյալ տիպի:
- Քարտեզը՝ որպես հղումային տիպ, նշանակում է, որ քարտեզի տիպի փոփոխականը պարունակում է հղում հիշողության մեջ քարտեզի տվյալների կառուցվածքին: Քարտեզի վրա կատարված փոփոխությունները տեսանելի կլինեն մյուս փոփոխականների միջոցով, որոնք հղում են անում նույն քարտեզին:
- Նուլ արժեքը
nilէ:nilքարտեզին գրանցում անել չի կարելի, փորձը կհանգեցնի փոթորիկի: - Քարտեզի չափը դինամիկորեն փոխվում է՝ ավելացնելով կամ հեռացնելով տարրեր:
Ներքին իրականացմանը՝ Go-ում քարտեզը իրականացվում է որպես հեշ աղյուսակ (hash table):
- Յուրաքանչյուր բանալին հեշավորվում է, և հեշի արդյունքը օգտագործվում է կապակցված արժեքի դիրքը որոշելու համար աղյուսակում:
// Քարտեզ ստեղծել
m := make(map[string]int)
// Ավելացնել տարրեր
m["մեկ"] = 1
m["երկու"] = 2
// Արժեք ստանալ
value, ok := m["մեկ"] // value = 1, ok = true
value, ok = m["երեք"] // value = 0 (զրո արժեք int-ի համար), ok = false
// Տարր հեռացնել
delete(m, "երկու")
// Քարտեզի վրա ցիկլ անել (տարբերակն ապահովված չէ)
for key, value := range m {
// ...
}
Քարտեզների համեմատություն՝
Երկու քարտեզները համարվում են հավասար, միայն եթե նրանք հղում են անում նույն ներքին կառուցվածքին, այսինքն՝ map1 == map2 միայն այն դեպքում, եթե map1 և map2 նույն փոփոխականներն են:
==օպերատորով քարտեզի պարունակությունը համեմատել չի թույլատրվում:- Համեմատության համար անհրաժեշտ է անցնել երկու քարտեզներով և համեմատել նրանց տարրերը:
Արձագանք՝ Քարտեզում մուտք գործելու, ավելացնելու և հեռացնելու գործողությունները միջինում ունեն O(1) ժամանակային բարդություն:
- վատագույն դեպքում (օրինակ՝ շատ հեշ-կողմնորոշումներ) կարող են տևել O(n) ժամանակ: