মূল কন্টেন্টে যান
মডিউল 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, ok তে পড়তে এবং দুটোই প্রিন্ট করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

দুটি রিটার্ন মান: মান এবং একটি উপস্থিতি বুলিয়ান।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m4.l3.e3
প্রস্তুত

একটি শূন্য মানচিত্রে লেখার সময় কি হয়?

Go
var m map[string]int
m["a"] = 1
উত্তরের বিকল্প

রিক্যাপ

  • map[K]V: কী-মান, রেফারেন্স, হ্যাশ-ব্যাকড।
  • make বা একটি আক্ষরিক দিয়ে শুরু করুন; শূন্য মানচিত্র → লিখতে আতঙ্ক।
  • v, ok := m[k] হল "শূন্য মান" থেকে "অনুপস্থিত" আলাদা করার একমাত্র উপায়।
  • delete(m, k) সরিয়ে দেয়; k বিদ্যমান না থাকলেও ঠিক আছে।
  • range পুনরাবৃত্তি: এলোমেলো অর্ডার।
  • কী: শুধুমাত্র তুলনীয় প্রকার (কোনও স্লাইস/ম্যাপ/ফাঙ্ক নয়)।
  • কাউন্টার প্যাটার্ন: freq[k]++ অন্তর্নিহিত শূন্য মানকে লিভার করে।