முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 4 · பாடம் 3 இன் 5பாடத்திட்டத்தில் 18/50~12 min
தொகுதி பாடங்கள் (3/5)

வரைபடங்கள்: விசைகள் மற்றும் மதிப்புகள்

வரைபடம் என்பது ஒரு விசை→மதிப்பு ஹாஷ் அட்டவணை: map[K]V. வரைபடங்கள் குறிப்பு வகைகள்: ஒரு செயல்பாட்டிற்கு அனுப்பப்பட்டது, அவை ஒரே சேமிப்பகத்தைப் பகிர்ந்து கொள்கின்றன. அவர்கள் இருக்க வேண்டும் நீங்கள் அவர்களுக்கு எழுதும் முன் துவக்கப்பட்டது (make அல்லது எழுத்துப்பூர்வமாக).

உருவாக்கம்

Go
// with a literal
prices := map[string]int{"pane": 2, "latte": 3}

// with make
counters := make(map[string]int)
counters["a"] = 1

// nil map (readable, NOT writable)
var m map[string]int
fmt.Println(m["x"])    // 0 — ok
// m["y"] = 1          // PANIC

அடிப்படை செயல்பாடுகள்

Go
m := map[string]int{"a": 1}

m["b"] = 2              // insert/update
v := m["a"]             // get; if missing: zero value
delete(m, "a")          // remove (ok even if the key doesn't exist)
n := len(m)             // number of entries

காற்புள்ளி-சரி: "காணவில்லை" என்பதை "பூஜ்ஜிய மதிப்பிலிருந்து" வேறுபடுத்துகிறது

Go
v, ok := m["x"]
if !ok {
    fmt.Println("key missing")
} else {
    fmt.Println("found:", v)
}

m["x"] திரும்புவதால், விசை இருக்கிறதா என்பதை அறிய இதுவே ஒரே வழி. விசை இல்லாத போதும் பூஜ்ஜிய மதிப்பு. ஒரு அடிப்படை வடிவம்.

மறு செய்கை: சீரற்ற வரிசை

Go
for k, v := range m {
    fmt.Println(k, v)
}

விசைகள்: ஒப்பிடக்கூடிய வகைகள் மட்டுமே

விசைகள் ஒப்பிடத்தக்கதாக இருக்க வேண்டும்: string, எண்கள், bool, சுட்டிகள், சேனல்கள், இடைமுகங்கள், ஒப்பிடக்கூடிய வகைகளின் வரிசைகள், ஒப்பிடக்கூடிய கட்டமைப்புகள் வயல்வெளிகள். துண்டுகள், வரைபடங்கள் மற்றும் செயல்பாடுகளை ஒப்பிட முடியாது → அவற்றால் முடியாது சாவியாக இருக்கும்.

Go
m := map[[2]int]string{}   // ok: array is comparable
// m := map[[]int]string{} // ERROR: slice is not comparable

முறை: கவுண்டர்கள்

வரைபடங்களின் பொதுவான பயன்பாடுகளில் ஒன்று:

Go
words := []string{"a", "b", "a", "c", "b", "a"}
freq := map[string]int{}
for _, w := range words {
    freq[w]++   // access to a missing key is 0 → 0+1 = 1
}
// freq = {"a": 3, "b": 2, "c": 1}

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#go.m4.l3.e1
முயற்சிகள்: 0ஏற்றுகிறது…

'a' -> 1 மற்றும் 'b' -> 2 மதிப்புகளுடன் வரைபட[string]int ஐ உருவாக்கவும், பின்னர் 'c' -> 3 ஐச் சேர்க்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

எழுத்து: `வரைபடம்[K]V{"விசை": மதிப்பு, ...}`.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

உடற்பயிற்சி#go.m4.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

கமா-ஓகே பேட்டர்னைப் பயன்படுத்தி 'x' விசையை (தற்போது இல்லை) v, சரி மற்றும் இரண்டையும் அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

இரண்டு திரும்பும் மதிப்புகள்: மதிப்பு மற்றும் இருப்பு பூலியன்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m4.l3.e3
தயார்

பூஜ்ய வரைபடத்தில் எழுதும்போது என்ன நடக்கும்?

Go
var m map[string]int
m["a"] = 1
பதில் விருப்பங்கள்

மறுபரிசீலனை

  • map[K]V: முக்கிய மதிப்பு, குறிப்பு, ஹாஷ் ஆதரவு.
  • make அல்லது ஒரு எழுத்தில் தொடங்கவும்; nil வரைபடம் → எழுதுவதில் பீதி.
  • v, ok := m[k] என்பது "பூஜ்ஜிய மதிப்பிலிருந்து" "காணாமல் போனதை" வேறுபடுத்துவதற்கான ஒரே வழி.
  • delete(m, k) நீக்குகிறது; k இல்லாவிட்டாலும் சரி.
  • range மறு செய்கை: ** சீரற்ற** வரிசை.
  • விசைகள்: ஒப்பிடக்கூடிய வகைகள் மட்டுமே (ஸ்லைஸ்/மேப்/ஃபங்க் இல்லை).
  • கவுண்டர்கள் முறை: freq[k]++ மறைமுகமான பூஜ்ஜிய மதிப்பை மேம்படுத்துகிறது.