ماڈیول اسباق (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 شامل کریں۔
اشارہ دکھائیں۔
لفظی: `map[K]V{"key": قدر، ...}`۔
3 کوششوں کے بعد حل دستیاب ہے۔
کلید 'x' (موجودہ نہیں) کو v، اوکے میں پڑھنے کے لیے کوما اوکے پیٹرن کا استعمال کریں اور دونوں کو پرنٹ کریں۔
اشارہ دکھائیں۔
واپسی کی دو قدریں: قدر اور موجودگی کا بولین۔
3 کوششوں کے بعد حل دستیاب ہے۔
صفر کے نقشے پر لکھتے وقت کیا ہوتا ہے؟
var m map[string]int
m["a"] = 1Recap
map[K]V: کلیدی قدر، حوالہ، ہیش بیکڈ۔makeیا لفظی کے ساتھ شروع کریں؛ صفر کا نقشہ → لکھنے پر گھبراہٹ۔v, ok := m[k]"لاپتہ" کو "صفر قدر" سے الگ کرنے کا واحد طریقہ ہے۔delete(m, k)ہٹاتا ہے؛ ٹھیک ہے یہاں تک کہ اگرkموجود نہیں ہے۔rangeتکرار: بے ترتیب آرڈر۔- کلیدیں: صرف موازنہ کی قسمیں (کوئی ٹکڑا/نقشہ/فنک نہیں)۔
- کاؤنٹر پیٹرن:
freq[k]++مضمر صفر قدر کا فائدہ اٹھاتا ہے۔