Sobes.tech
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) ժամանակ: