Go-তে map একটি বিল্ট-ইন ডেটা টাইপ, যা কী (key) থেকে মানে ম্যাপ করে।
অন্য প্রোগ্রামিং ভাষায় আপনি হয়তো ডিকশনারি, হ্যাশ টেবিল, কী (key) ও মানের স্টোর বা অ্যাসোসিয়েটিভ অ্যারে হিসেবে map-এর ধারণার সাথে পরিচিত হতে পারেন।
সিনট্যাক্সের দিক থেকে map দেখতে এমন হয়:
map[KeyType]ElementType
এটাও জেনে রাখা জরুরি যে প্রতিটি কী (key) অনন্য, অর্থাৎ একই কী (key) দুবার অ্যাসাইন করলে সংশ্লিষ্ট কী (key)-এর মান ওভাররাইট হয়ে যাবে।
একটি ম্যাপ তৈরি করতে পারেন এভাবে:
// With map literal
foo := map[string]int{}
অথবা
// or with make function
foo := make(map[string]int)
ম্যাপ দিয়ে আপনি যেসব কাজ করতে পারেন, তার কিছু উদাহরণ এখানে দেওয়া হলো।
// Add a value in a map with the `=` operator:
foo["bar"] = 42
// Here we update the element of `bar`
foo["bar"] = 73
// To retrieve a map value, you can use
baz := foo["bar"]
// To delete an item from a map, you can use
delete(foo, "bar")
ম্যাপে নেই এমন কোনো কী (key)-এর মান বের করার চেষ্টা করলে এটি ভ্যালু টাইপের শূন্য মান রিটার্ন করবে।
এতে আপনি বিভ্রান্ত হতে পারেন, বিশেষ করে যদি আপনার ElementType-এর ডিফল্ট মান (যেমন int টাইপের ক্ষেত্রে 0) একটি বৈধ মান হয়।
আপনার ম্যাপে কোনো কী (key) আছে কি না তা যাচাই করতে পারেন এভাবে:
value, exists := foo["baz"]
// If the key "baz" does not exist,
// value: 0; exists: false
আপনার এক বন্ধুর Gross Store নামে একটি পুরনো পাইকারি দোকান আছে। নামটি এসেছে দোকানটি যে পরিমাণে জিনিস বিক্রি করে তা থেকে: সবকিছুই মাপা হয় গ্রস একক-এ। আপনার বন্ধু আপনাকে তার দোকানের জন্য একটি পয়েন্ট অফ সেল (POS) সিস্টেম বানাতে বলেছেন। প্রথমে আপনি এটির একটি প্রোটোটাইপ তৈরি করতে চান। আপনার প্রোটোটাইপে আপনার সিস্টেম শুধু পরিমাণ রেকর্ড করবে। সাহায্য করার জন্য আপনার বন্ধু আপনাকে পরিমাপের একটি তালিকা দিয়েছেন:
| একক | মান |
|---|---|
| quarter_of_a_dozen | 3 |
| half_of_a_dozen | 6 |
| dozen | 12 |
| small_gross | 120 |
| gross | 144 |
| great_gross | 1728 |
পরিমাপটি ব্যবহার করতে হলে আপনাকে এটি আপনার প্রোগ্রামে সংরক্ষণ করতে হবে।
units := Units()
fmt.Println(units)
// Output: map[...] with entries like ("dozen": 12)
আপনাকে এমন একটি ফাংশন বানাতে হবে যা গ্রাহকের জন্য একটি নতুন (খালি) বিল তৈরি করে।
bill := NewBill()
fmt.Println(bill)
// Output: map[]
এটি বানাতে হলে আপনাকে করতে হবে:
unit যদি units ম্যাপে না থাকে, তাহলে false রিটার্ন করুন।bill-এ আইটেমটি যোগ করুন, তারপর true রিটার্ন করুন।unit-এর অন্তর্গত পরিমাণ দিয়ে তার পরিমাণ বাড়িয়ে দিন।bill := NewBill()
units := Units()
ok := AddItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: true (since dozen is a valid unit)
খেয়াল করুন, রিটার্ন ভ্যালুটি
boolটাইপের।
এটি বানাতে হলে আপনাকে করতে হবে:
false রিটার্ন করুন।unit যদি units ম্যাপে না থাকে, তাহলে false রিটার্ন করুন।false রিটার্ন করুন।bill থেকে আইটেমটি সম্পূর্ণভাবে সরিয়ে ফেলুন, তারপর true রিটার্ন করুন।true রিটার্ন করুন।bill := NewBill()
units := Units()
ok := RemoveItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: false (because there are no carrots in the bill)
খেয়াল করুন, রিটার্ন ভ্যালুটি
boolটাইপের।
এটি বানাতে হলে আপনাকে করতে হবে:
item বিলে না থাকলে 0 এবং false রিটার্ন করুন।bill-এ থাকা আইটেমটির পরিমাণ এবং true রিটার্ন করুন।bill := map[string]int{"carrot": 12, "grapes": 3}
qty, ok := GetItem(bill, "carrot")
fmt.Println(qty)
// Output: 12
fmt.Println(ok)
// Output: true
খেয়াল করুন, রিটার্ন ভ্যালু দুটি
intএবংboolটাইপের।
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।