דילוג לתוכן המרכזי
מודול 4 · שיעור 3 מתוך 518/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טוען...

צור מפה[string]int עם הערכים 'a' -> 1 ו-'b' -> 2, ולאחר מכן הוסף 'c' -> 3.

טוען עורך...
הצג רמז

מילולי: `map[K]V{"key": value, ...}`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#go.m4.l3.e2
ניסיונות: 0טוען...

השתמש בתבנית פסיק אישור כדי לקרוא את המפתח 'x' (לא קיים) לתוך v, ok והדפיס את שניהם.

טוען עורך...
הצג רמז

שני ערכי החזרה: הערך ונוכחות בוליאני.

הפתרון זמין לאחר 3 ניסיונות

Quiz#go.m4.l3.e3
מוכן

מה קורה כשכותבים למפה אפסית?

Go
var m map[string]int
m["a"] = 1
אפשרויות תשובה

לְסַכֵּם

  • map[K]V: מפתח-ערך, הפניה, מגובת hash.
  • אתחול עם make או מילולית; מפה אפסית → פאניקה בכתיבה.
  • v, ok := m[k] היא הדרך היחידה להבחין בין "חסר" ל"ערך אפס".
  • delete(m, k) הסרה; בסדר גם אם k לא קיים.
  • range איטרציה: סדר אקראי.
  • מקשים: רק סוגים דומים (ללא פרוסה/מפה/func).
  • דפוס מונים: freq[k]++ ממנף את ערך האפס המרומז.