Чӣ гуна навъи маълумоти Map дар Go кор мекунад?
sobes.tech AI
Ҷавоб аз AI
Нақша — ин коллексияи номарзии ҷуфтҳои "калид-арзиш" дар Go мебошад.
Хусусиятҳо:
- Калидҳо бояд намудҳои муқоисаёбанда (с numbers, сатрҳо, boolean, ишорагарон, каналҳо, интерфейсҳо, агар намудҳои динамикӣ муқоисаёбанда бошанд, ва массивҳо агар унсурҳои онҳо муқоисаёбанда бошанд) бошанд. Слайсҳо, функсияҳо ва дигар нақшаҳо ҳамчун калид истифода намешаванд.
- Арзишҳо метавонанд аз ҳар намуде бошанд.
- Нақша навъест, ки ба он ишора мекунад, яъне, тағйирёбандаи навъи нақша ба структураи маълумоти нақша дар хотира ишора мекунад. Тағйирот дар нақша тавассути як тағйирёбанда дар дигар тағйирёбандаҳо, ки ба ҳамин нақша ишора мекунанд, намоён мешавад.
- Арзиши сифр барои нақша
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) вақт гиранд.