మాడ్యూల్ పాఠాలు (3/5)
మ్యాప్స్: కీలు మరియు విలువలు
మ్యాప్ అనేది కీ→విలువ హాష్ పట్టిక: map[K]V. మ్యాప్లు సూచన
రకాలు: ఫంక్షన్కి పంపబడింది, అవి ఒకే నిల్వను పంచుకుంటాయి. వారు ఉండాలి
మీరు వారికి వ్రాయడానికి ముందు ప్రారంభించబడింది (make లేదా అక్షరార్థంతో).
సృష్టి
// 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ప్రాథమిక కార్యకలాపాలు
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కామా-ఓకే: "తప్పిపోయిన" నుండి "సున్నా విలువ" నుండి వేరు చేయడం
v, ok := m["x"]
if !ok {
fmt.Println("key missing")
} else {
fmt.Println("found:", v)
}కీ ఉనికిలో ఉందో లేదో తెలుసుకోవడానికి ఇది ఏకైక మార్గం, ఎందుకంటే m["x"] తిరిగి వస్తుంది
కీ లేనప్పుడు కూడా సున్నా విలువ. ఒక ప్రాథమిక నమూనా.
పునరావృతం: యాదృచ్ఛిక క్రమం
for k, v := range m {
fmt.Println(k, v)
}కీలు: పోల్చదగిన రకాలు మాత్రమే
కీలు తప్పనిసరిగా ** పోల్చదగినవి**: string, సంఖ్యలు, bool, పాయింటర్లు,
ఛానెల్లు, ఇంటర్ఫేస్లు, పోల్చదగిన రకాల శ్రేణులు, పోల్చదగిన నిర్మాణాలు
పొలాలు. స్లైస్లు, మ్యాప్లు మరియు ఫంక్షన్లు పోల్చదగినవి కావు → అవి చేయలేవు
కీలుగా ఉండండి.
m := map[[2]int]string{} // ok: array is comparable
// m := map[[]int]string{} // ERROR: slice is not comparableనమూనా: కౌంటర్లు
మ్యాప్ల యొక్క అత్యంత సాధారణ ఉపయోగాలలో ఒకటి:
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}దీనిని ప్రయత్నించండి
'a' -> 1 మరియు 'b' -> 2 విలువలతో మ్యాప్[string]int సృష్టించండి, ఆపై 'c' -> 3ని జోడించండి.
సూచనను చూపించు
సాహిత్యం: `మ్యాప్[K]V{"కీ": విలువ, ...}`.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
'x' (ప్రస్తుతం లేదు) కీని v, ok లోకి చదవడానికి మరియు రెండింటినీ ప్రింట్ చేయడానికి కామా-ok నమూనాను ఉపయోగించండి.
సూచనను చూపించు
రెండు రిటర్న్ విలువలు: విలువ మరియు ఉనికి బూలియన్.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
నిల్ మ్యాప్కి వ్రాసేటప్పుడు ఏమి జరుగుతుంది?
var m map[string]int
m["a"] = 1రీక్యాప్
map[K]V: కీ-విలువ, సూచన, హ్యాష్-బ్యాక్డ్.makeతో ప్రారంభించండి లేదా అక్షరార్థం; నిల్ మ్యాప్ → వ్రాయడంపై భయాందోళన.v, ok := m[k]"తప్పిపోయిన" నుండి "సున్నా విలువ" నుండి వేరు చేయడానికి ఏకైక మార్గం.delete(m, k)తొలగిస్తుంది;kఉనికిలో లేకపోయినా సరే.rangeపునరావృతం: యాదృచ్ఛికం ఆర్డర్.- కీలు: పోల్చదగిన రకాలు మాత్రమే (స్లైస్/మ్యాప్/ఫంక్ లేదు).
- కౌంటర్ల నమూనా:
freq[k]++అవ్యక్త సున్నా విలువను ప్రభావితం చేస్తుంది.