Sobes.tech
Junior

როგორ მუშაობს Map მონაცემთა ტიპი Go-ში?

sobes.tech AI

პასუხი AI-სგან

Map — ეს არის შეუკვეთა არჩეული კოლექცია წყვილ "საკვანძო-ფასი" in Go.

სხვაობები:

  • საკვანძოები უნდა იყოს შედარებადი მონაცემთა ტიპები (ციფრები, სტრინგები, ბულევერები, მაჩვენებლები, არხები, ინტერფეისები, თუ დინამიური ტიპი შედარებადი არის, და მასივები, თუ მათი ელემენტები შედარებადი არიან). სრეზები, ფუნქციები და სხვა map-ები არ შეიძლება გამოიყენოს საკვანძოებად.
  • მნიშვნელობები შეიძლება იყოს ნებისმიერი ტიპის მონაცემები.
  • Map არის მიმთითებელი ტიპი, რაც ნიშნავს, რომ map-ის ტიპის ცვლადი შეიცავს მითითებას map-ის მონაცემთა სტრუქტურაზე მეხსიერებაში. ცვლილება map-ის ერთ ცვლადზე იქნება ჩანს სხვა ცვლადებზე, რომლებიც მასზე მიუთითებენ.
  • ნულოვანი მნიშვნელობა map-ისთვის არის nil. nil map-ზე წერა შეუძლებელია, წერის მცდელობა გამოიწვევს პანიკას.
  • 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).