როგორ მუშაობს Map მონაცემთა ტიპი Go-ში?
sobes.tech AI
პასუხი AI-სგან
Map — ეს არის შეუკვეთა არჩეული კოლექცია წყვილ "საკვანძო-ფასი" in Go.
სხვაობები:
- საკვანძოები უნდა იყოს შედარებადი მონაცემთა ტიპები (ციფრები, სტრინგები, ბულევერები, მაჩვენებლები, არხები, ინტერფეისები, თუ დინამიური ტიპი შედარებადი არის, და მასივები, თუ მათი ელემენტები შედარებადი არიან). სრეზები, ფუნქციები და სხვა map-ები არ შეიძლება გამოიყენოს საკვანძოებად.
- მნიშვნელობები შეიძლება იყოს ნებისმიერი ტიპის მონაცემები.
- Map არის მიმთითებელი ტიპი, რაც ნიშნავს, რომ map-ის ტიპის ცვლადი შეიცავს მითითებას map-ის მონაცემთა სტრუქტურაზე მეხსიერებაში. ცვლილება map-ის ერთ ცვლადზე იქნება ჩანს სხვა ცვლადებზე, რომლებიც მასზე მიუთითებენ.
- ნულოვანი მნიშვნელობა map-ისთვის არის
nil.nilmap-ზე წერა შეუძლებელია, წერის მცდელობა გამოიწვევს პანიკას. - Map-ის ზომა დინამიურად იცვლება ელემენტების დამატებისა ან წაშლის დროს.
შიდა განხორციელება: Map in Go არის ჰეშ-ტაბლოს სახით განხორციელებული. თითოეული საკვანძო ჰეშდება, და ჰეშის შედეგი გამოიყენება შესაბამისი მნიშვნელობის განთავსებისთვის ტაბლოში.
// Map-ის შექმნა
m := make(map[string]int)
// ელემენტების დამატება
m["ერთი"] = 1
m["ორი"] = 2
// მნიშვნელობის მიღება
value, ok := m["ერთი"] // value = 1, ok = ჭეშმარიტი
value, ok = m["სამი"] // value = 0 (int-ის ნულოვანი მნიშვნელობა), ok = მცდარი
// ელემენტის წაშლა
delete(m, "ორი")
// Map-ის გადაცემა (სწორად არ არის გარანტირებული წესრიგი)
for key, value := range m {
// ...
}
შედარება map-ების: ორი map ითვლება თანაბარად, თუ ისინი მიუთითებენ ერთსა და იმავე შიდა სტრუქტურაზე, ანუ map1 == map2 მხოლოდ მაშინ, როდესაც map1 და map2 ერთიდაიგივე ცვლადია. Map-ის შინაარსი არ შეიძლება შეადაროს ოპერატორ ==-ით. შინაარსის შედარებისათვის საჭიროა ორივე map-ზე გავლა და მათი ელემენტების შედარება.
პროდუქტიულობა: Map-ის წვდომა, დამატება და წაშლა ოპერაციები საშუალოდ O(1) სიჩქარით ხორციელდება. ყველაზე უარესი შემთხვევებში (მაგალითად, ჰეშების კოლიზიების დიდი რაოდენობის დროს) ისინი შეიძლება გახდნენ O(n).