Go-তে Maps (ম্যাপ)
Maps (ম্যাপ) হলো একটি ডেটা স্ট্রাকচার যা একটি কী (key) এবং একটি মান (value) এর মধ্যে সম্পর্ক স্থাপন করে। এটি একটি অর্ডারহীন সংগ্রহ (unordered collection) যেখানে প্রতিটি কী মানের সাথে সংযুক্ত থাকে। Go-তে maps ব্যবহৃত হয় দ্রুত ডেটা অনুসন্ধান, ইনসার্ট এবং ডিলিট করার জন্য, এবং এটি অন্যান্য ডেটা স্ট্রাকচারের তুলনায় অধিক কার্যকরী হয় যখন আপনাকে বড় আকারের ডেটা পরিচালনা করতে হয়।
১. Maps ডিফাইনেশন এবং ডিক্লারেশন
Go-তে map ডিফাইন করতে make ফাংশন ব্যবহার করা হয় অথবা সরাসরি টাইপ ঘোষণার মাধ্যমে ম্যাপ ডিক্লেয়ার করা যায়। একটি ম্যাপের প্রতিটি উপাদান একটি কী (key) এবং একটি মান (value) ধারণ করে।
১.১ Map ডিক্লারেশন ও ইনিশিয়ালাইজেশন
package main
import "fmt"
func main() {
// make ফাংশন দিয়ে map তৈরি করা
m := make(map[string]int)
// ম্যাপে মান অ্যাসাইন করা
m["Alice"] = 30
m["Bob"] = 25
fmt.Println(m)
}এখানে, m একটি map যার কী হলো string এবং মান হলো int টাইপ। আমরা "Alice" এবং "Bob" নামের জন্য বয়স অ্যাসাইন করেছি।
আউটপুট:
map[Alice:30 Bob:25]১.২ Map ডিক্লারেশন সরাসরি মান দিয়ে
package main
import "fmt"
func main() {
// সরাসরি মান দিয়ে map তৈরি করা
m := map[string]int{
"Alice": 30,
"Bob": 25,
}
fmt.Println(m)
}এখানে, আমরা map টাইপের একটি ম্যাপ সরাসরি ইনিশিয়ালাইজ করেছি, যেখানে কী এবং মান আগে থেকেই দেয়া আছে।
আউটপুট:
map[Alice:30 Bob:25]২. Map এর উপর কাজ করা
২.১ Map এর মান অ্যাক্সেস করা
Map-এর একটি নির্দিষ্ট কী এর মান অ্যাক্সেস করতে ডট (.) অপারেটর ব্যবহার করা হয়।
package main
import "fmt"
func main() {
m := map[string]int{
"Alice": 30,
"Bob": 25,
}
// "Alice"-এর বয়স অ্যাক্সেস করা
fmt.Println("Alice's age:", m["Alice"]) // আউটপুট: Alice's age: 30
}২.২ Map এ নতুন কী-মান যুক্ত করা
আপনি একটি নতুন কী-মান অ্যাসাইন করতে পারেন বা আগের মান আপডেট করতে পারেন।
m["Charlie"] = 35 // নতুন কী-মান যুক্ত করা
fmt.Println(m)আউটপুট:
map[Alice:30 Bob:25 Charlie:35]২.৩ Map থেকে কী-মান মুছে ফেলা
Go-তে delete() ফাংশন ব্যবহার করে ম্যাপ থেকে একটি কী এবং তার সম্পর্কিত মান মুছে ফেলা যায়।
delete(m, "Bob") // "Bob" কে মুছে ফেলা
fmt.Println(m)আউটপুট:
map[Alice:30 Charlie:35]৩. Map এ কি/মানের উপস্থিতি চেক করা
Map-এ একটি কী আছে কিনা তা চেক করতে আপনি দুটি ভ্যালু রিটার্ন করতে পারেন। একটি হলো মান, আর দ্বিতীয়টি হলো বুলিয়ান ভ্যালু যা আপনাকে জানাবে সেই কীটা ম্যাপে আছে কিনা।
package main
import "fmt"
func main() {
m := map[string]int{
"Alice": 30,
"Bob": 25,
}
value, exists := m["Alice"]
if exists {
fmt.Println("Alice's age:", value) // আউটপুট: Alice's age: 30
} else {
fmt.Println("Alice not found")
}
value, exists = m["Charlie"]
if exists {
fmt.Println("Charlie's age:", value)
} else {
fmt.Println("Charlie not found") // আউটপুট: Charlie not found
}
}এখানে m["Alice"] এর মান 30 হবে, এবং m["Charlie"] চেক করলে এটি false রিটার্ন করবে কারণ Charlie কীটি ম্যাপে নেই।
৪. Maps এর বৈশিষ্ট্য এবং ব্যবহার
- অর্ডারহীন: Maps হল অর্ডারহীন ডেটা স্ট্রাকচার, মানে যখন আপনি ম্যাপটি প্রিন্ট করেন, এটি আর্লি ইনসার্ট করা মানগুলির সাজানো অবস্থানে না থেকে যেকোনো অর্ডারে প্রদর্শিত হবে।
- Unique Keys: একটি ম্যাপের মধ্যে প্রতিটি কীটি একবার ব্যবহার করা যেতে পারে। আপনি একই কী দিয়ে একাধিক মান অ্যাসাইন করতে পারবেন না।
- Efficient Search: ম্যাপগুলি অত্যন্ত দ্রুত এবং কার্যকরীভাবে মান খুঁজে পেতে সাহায্য করে। এটি সস্তা সার্চ এবং দ্রুত ইনসার্ট এবং ডিলিট অপারেশন করতে সক্ষম।
৫. Maps এর ব্যবহারিক উদাহরণ
ধরা যাক, আপনি একটি স্টুডেন্ট রেজিস্ট্রেশন সিস্টেম তৈরি করছেন, যেখানে ছাত্রদের নাম এবং তাদের পরীক্ষার ফলাফল সংরক্ষণ করতে চান।
package main
import "fmt"
func main() {
// Student result map
studentResults := map[string]int{
"John": 85,
"Alice": 92,
"Bob": 77,
}
// নতুন ছাত্রের ফলাফল যুক্ত করা
studentResults["Charlie"] = 88
// ছাত্রদের ফলাফল প্রিন্ট করা
for name, score := range studentResults {
fmt.Println(name, "scored", score)
}
}আউটপুট:
John scored 85
Alice scored 92
Bob scored 77
Charlie scored 88সারসংক্ষেপ
- Maps: একটি ডেটা স্ট্রাকচার যা কী এবং মানের মধ্যে সম্পর্ক স্থাপন করে। এটি দ্রুত মান অনুসন্ধান, ইনসার্ট এবং ডিলিট অপারেশন করতে সহায়ক।
- Map ডিফাইনেশন:
map[KeyType]ValueTypeদ্বারা ডিফাইন করা হয়। - Key-Value Pairs: Maps এ প্রতিটি কী একটি মানের সাথে যুক্ত থাকে।
- Map Operations: Maps এ মান অ্যাক্সেস, মান আপডেট, কী-মান মুছে ফেলা, এবং কী উপস্থিতি চেক করা সম্ভব।
Go-তে Maps ব্যবহারের মাধ্যমে আপনি সহজেই কী-মান ভিত্তিক ডেটা সংরক্ষণ এবং ম্যানিপুলেট করতে পারেন। এটি একটি খুব শক্তিশালী ডেটা স্ট্রাকচার যা কোডের কার্যকারিতা এবং মেমরি ব্যবস্থাপনা উন্নত করে।
Go-তে Map এর ডিক্লারেশন এবং Initialization
১. Map কি?
Go তে Map হল একটি ডেটা স্ট্রাকচার যা key-value পেয়ার (অথবা চাবি-মূল্য জোড়া) সংরক্ষণ করে। এটি একটি অসংখ্য ডেটা আইটেমের দ্রুত অ্যাক্সেস প্রদান করে, যেখানে প্রতিটি আইটেম একটি ইউনিক কী দ্বারা চিহ্নিত করা হয়।
Map এর সাধারণ ব্যবহার:
- একটি নির্দিষ্ট কী (key) দিয়ে দ্রুত মান (value) অ্যাক্সেস করা।
- ডুপ্লিকেট কী এড়ানো যায়, কারণ প্রতিটি কী এক্সক্লুসিভ (একক)।
২. Map ডিক্লারেশন
Go তে একটি Map ডিক্লেয়ার করতে নিম্নলিখিত সিনট্যাক্স ব্যবহার করা হয়:
var mapName map[keyType]valueTypemapName: Map এর নামkeyType: Map এর কী এর টাইপvalueType: Map এর মানের টাইপ
২.১ Map ডিক্লারেশন উদাহরণ
package main
import "fmt"
func main() {
var m map[string]int // একটি স্ট্রিং কী এবং ইন্ট মান ধারণকারী map ডিক্লেয়ার করা
fmt.Println(m) // আউটপুট: map[] (খালি map)
}এখানে, m একটি map যা string কী এবং int মান ধারণ করবে। তবে, এটি এখন পর্যন্ত ইনিশিয়ালাইজড হয়নি, তাই এটি একটি খালি map।
৩. Map Initialization (ইনিশিয়ালাইজেশন)
Go তে Map ইনিশিয়ালাইজ করার জন্য দুটি উপায় রয়েছে:
- make() ফাংশন ব্যবহার করে
- Literal Syntax ব্যবহার করে (নির্দিষ্ট মান দিয়ে ইনিশিয়ালাইজ করা)
৩.১ make() ফাংশন দিয়ে Map ইনিশিয়ালাইজ করা
make() ফাংশন ব্যবহার করে একটি map ইনিশিয়ালাইজ করা হয়। make() ফাংশন Map এর জন্য মেমরি এলোকেট করে এবং এটিকে ব্যবহারের জন্য প্রস্তুত করে।
package main
import "fmt"
func main() {
// make() ফাংশন দিয়ে map ইনিশিয়ালাইজ করা
m := make(map[string]int)
m["apple"] = 5
m["banana"] = 10
fmt.Println(m) // আউটপুট: map[apple:5 banana:10]
}এখানে, m একটি map যা string কী এবং int মান ধারণ করে এবং make() ফাংশন দ্বারা এটি ইনিশিয়ালাইজ করা হয়েছে। পরে apple এবং banana কী দ্বারা মান অ্যাসাইন করা হয়েছে।
৩.২ Literal Syntax দিয়ে Map ইনিশিয়ালাইজ করা
Go তে আপনি ডিরেক্টলি মান দিয়ে map ইনিশিয়ালাইজ করতে পারেন:
package main
import "fmt"
func main() {
// Literal Syntax ব্যবহার করে Map ইনিশিয়ালাইজ করা
m := map[string]int{
"apple": 5,
"banana": 10,
}
fmt.Println(m) // আউটপুট: map[apple:5 banana:10]
}এখানে, m map কে সরাসরি "apple" এবং "banana" কীগুলির সাথে ইনিশিয়ালাইজ করা হয়েছে।
৩.৩ Map এর আকার (Capacity) এবং সাইজ (Length)
Go তে map এর আকার এবং সাইজ বের করতে len() ফাংশন ব্যবহার করা হয়। এটা map এ উপস্থিত key-value পেয়ার গুলোর সংখ্যা ফেরত দেয়।
package main
import "fmt"
func main() {
m := map[string]int{
"apple": 5,
"banana": 10,
"grape": 7,
}
fmt.Println("Length of map:", len(m)) // আউটপুট: 3
}এখানে, len(m) map m এর সাইজ বা key-value পেয়ার গুলোর সংখ্যা ৩ হবে।
৪. Map থেকে মান অ্যাক্সেস এবং ম্যানিপুলেশন
৪.১ Map এর মান অ্যাক্সেস করা
package main
import "fmt"
func main() {
m := map[string]int{
"apple": 5,
"banana": 10,
}
// Map থেকে একটি মান অ্যাক্সেস করা
fmt.Println("apple:", m["apple"]) // আউটপুট: apple: 5
fmt.Println("banana:", m["banana"]) // আউটপুট: banana: 10
}এখানে, আমরা m["apple"] দিয়ে apple কী থেকে মান 5 অ্যাক্সেস করছি।
৪.২ Map এ নতুন key-value পেয়ার যোগ করা
package main
import "fmt"
func main() {
m := map[string]int{
"apple": 5,
}
// নতুন key-value পেয়ার যোগ করা
m["banana"] = 10
m["grape"] = 7
fmt.Println(m) // আউটপুট: map[apple:5 banana:10 grape:7]
}এখানে, আমরা m["banana"] = 10 দিয়ে banana কীকে মান 10 দিয়ে আপডেট করেছি।
৪.৩ Map থেকে key-value পেয়ার মুছে ফেলা
Map থেকে কোনো key-value পেয়ার মুছে ফেলার জন্য delete() ফাংশন ব্যবহার করা হয়:
package main
import "fmt"
func main() {
m := map[string]int{
"apple": 5,
"banana": 10,
"grape": 7,
}
// "banana" কী মুছে ফেলা
delete(m, "banana")
fmt.Println(m) // আউটপুট: map[apple:5 grape:7]
}এখানে, delete(m, "banana") দিয়ে banana কীটি map থেকে মুছে ফেলা হয়েছে।
৫. Nil Map
Go তে একটি nil map ডিক্লেয়ার করা যায়, যেটি কোনো মান ধারণ করে না। যদি আপনি একটি nil map থেকে কোনো মান অ্যাক্সেস করতে যান, তাহলে এটি ডিফল্ট মান প্রদান করবে (যেমন: 0 ইন্ট টাইপের জন্য, "" স্ট্রিং টাইপের জন্য)।
package main
import "fmt"
func main() {
var m map[string]int // একটি nil map ডিক্লেয়ার করা
// nil map থেকে মান অ্যাক্সেস করা
fmt.Println(m) // আউটপুট: map[]
fmt.Println(m["apple"]) // আউটপুট: 0
}এখানে, m একটি nil map, এবং m["apple"] অ্যাক্সেস করলে তা ডিফল্ট মান 0 ফেরত দিবে।
সারসংক্ষেপ
- Map ডিক্লারেশন: Go তে map ডিক্লেয়ার করার জন্য
map[keyType]valueTypeসিনট্যাক্স ব্যবহার করা হয়। - Map Initialization: আপনি map ইনিশিয়ালাইজ করতে
make()ফাংশন অথবা লিটারাল সিনট্যাক্স ব্যবহার করতে পারেন। - Map Manipulation:
len(),delete()ফাংশন ব্যবহার করে map এর সাইজ এবং উপাদান ম্যানিপুলেট করা যায়। - Nil Map:
nilmap ডিক্লেয়ার করলে সেটি ডিফল্ট মানের সাথে খালি থাকে।
Go তে Map ডেটা স্ট্রাকচারটি খুবই শক্তিশালী এবং এটি দ্রুত ডেটা অ্যাক্সেস এবং পরিচালনার জন্য ব্যবহৃত হয়।
Go-তে Key-Value Pair এর সাথে কাজ করা (Maps)
Go প্রোগ্রামিং ভাষায় Maps হল একটি ডেটা স্ট্রাকচার যা Key-Value Pair ধারণ করে। মানে, এখানে একটি Key থাকবে, এবং সেই Key-এর জন্য একটি Value থাকবে। এটি একটি অর্ডারহীন ডেটা স্ট্রাকচার এবং Key এর মাধ্যমে Value অ্যাক্সেস করা হয়।
Maps Go-তে খুবই শক্তিশালী এবং ব্যবহারযোগ্য ডেটা স্ট্রাকচার, বিশেষত যখন আপনি দ্রুত ডেটা খুঁজতে চান বা কিছু ডেটার সাথে যুক্ত ভ্যালু রাখতে চান।
১. Map ডিফাইনেশন
Go তে map ডিফাইন করার জন্য make() ফাংশন অথবা map[] সিনট্যাক্স ব্যবহার করা হয়।
১.১ Map ডিফাইনেশন এবং ইনিশিয়ালাইজেশন
package main
import "fmt"
func main() {
// make() ফাংশন ব্যবহার করে map ডিফাইন করা
m := make(map[string]int)
// Key-Value যোগ করা
m["age"] = 30
m["score"] = 100
fmt.Println(m)
}এখানে, m একটি map যা string টাইপের key এবং int টাইপের value ধারণ করে। make(map[string]int) দিয়ে আমরা একটি নতুন map তৈরি করেছি এবং তারপর সেটিতে key-value পেয়ার যুক্ত করেছি।
আউটপুট:
map[age:30 score:100]১.২ একইভাবে নির্দিষ্ট মান দিয়ে map তৈরি
package main
import "fmt"
func main() {
// key-value দিয়ে map ইনিশিয়ালাইজ করা
m := map[string]int{
"age": 25,
"score": 90,
}
fmt.Println(m)
}এখানে, আমরা একটি map তৈরি করেছি এবং সরাসরি কিছু key-value পেয়ার ইনিশিয়ালাইজ করেছি।
আউটপুট:
map[age:25 score:90]২. Map এ Key-Value Access করা
Map এ নির্দিষ্ট Key এর Value অ্যাক্সেস করতে, আপনি Key ব্যবহার করেন।
২.১ Map থেকে Value এক্সট্র্যাক্ট করা
package main
import "fmt"
func main() {
m := map[string]int{
"age": 25,
"score": 90,
}
// Key দিয়ে Value অ্যাক্সেস করা
fmt.Println("Age:", m["age"]) // আউটপুট: 25
fmt.Println("Score:", m["score"]) // আউটপুট: 90
}এখানে, আমরা m["age"] এবং m["score"] দিয়ে map থেকে মান অ্যাক্সেস করেছি।
২.২ Key-এর মাধ্যমে Value চেক করা
গো-তে, যখন আপনি একটি Key থেকে Value অ্যাক্সেস করেন, তখন এটা zero value রিটার্ন করতে পারে যদি সেই Key-টি না থাকে। এজন্য আপনি একটি দ্বিতীয় মান (value, exists) চেক করতে পারেন।
package main
import "fmt"
func main() {
m := map[string]int{
"age": 25,
"score": 90,
}
// Key চেক করা
if value, ok := m["age"]; ok {
fmt.Println("Found age:", value) // আউটপুট: Found age: 25
} else {
fmt.Println("Key 'age' not found")
}
// Non-existent Key চেক করা
if value, ok := m["height"]; ok {
fmt.Println("Found height:", value)
} else {
fmt.Println("Key 'height' not found") // আউটপুট: Key 'height' not found
}
}এখানে, ok ভেরিয়েবল true হবে যদি Key পাওয়া যায় এবং false হলে Key পাওয়া যাবে না।
৩. Map-এ Value আপডেট করা
আপনি একটি existing Key এর Value পরিবর্তন করতে পারবেন।
package main
import "fmt"
func main() {
m := map[string]int{
"age": 25,
"score": 90,
}
// Key-এর Value আপডেট করা
m["age"] = 30
fmt.Println("Updated map:", m) // আউটপুট: map[age:30 score:90]
}এখানে, "age" Key-এর মান পরিবর্তন করে 30 করা হয়েছে।
৪. Map-এ Key এবং Value Iteration
Go-তে map এর Key এবং Value গুলোর উপর ইটারেট করার জন্য for লুপ ব্যবহার করা হয়।
৪.১ Map এর উপর Loop চালানো
package main
import "fmt"
func main() {
m := map[string]int{
"age": 25,
"score": 90,
"year": 2024,
}
// Map এর Key-Value উপর ইটারেট করা
for key, value := range m {
fmt.Println(key, ":", value)
}
}এখানে, range ব্যবহার করে map এর প্রতিটি Key এবং Value এর উপর ইটারেট করা হচ্ছে।
আউটপুট:
age : 25
score : 90
year : 2024৫. Map-এ Key মুছে ফেলা
Go-তে আপনি delete() ফাংশন ব্যবহার করে একটি Key এবং তার সম্পর্কিত Value মুছে ফেলতে পারেন।
৫.১ Map থেকে Key মুছে ফেলা
package main
import "fmt"
func main() {
m := map[string]int{
"age": 25,
"score": 90,
}
// Key মুছে ফেলা
delete(m, "score")
fmt.Println(m) // আউটপুট: map[age:25]
}এখানে, delete(m, "score") দ্বারা "score" Key এবং তার সম্পর্কিত Value মুছে দেওয়া হয়েছে।
৬. Map এর Capcity এবং Length
Go-তে len() ফাংশন ব্যবহার করে Map এর লেন্থ (অর্থাৎ, মোট Key-Value পেয়ার) পাওয়া যায়। তবে, capacity এর জন্য Go-তে সরাসরি কোনো ফাংশন নেই।
package main
import "fmt"
func main() {
m := map[string]int{
"age": 25,
"score": 90,
}
fmt.Println("Length of map:", len(m)) // আউটপুট: 2
}এখানে, len(m) দ্বারা map এর Key-Value পেয়ার এর সংখ্যা বের করা হয়েছে।
সারসংক্ষেপ
- Maps: Go-তে Maps হল একটি ডেটা স্ট্রাকচার যা Key-Value Pair ধারণ করে। এটি ডেটা দ্রুত অ্যাক্সেস করতে ব্যবহৃত হয়।
- Key-Value Pair: Maps এর Key এর মাধ্যমে সংশ্লিষ্ট Value অ্যাক্সেস করা যায় এবং Value আপডেট করা যায়।
- Operations: Go-তে Maps এর বিভিন্ন অপারেশন যেমন Key-Value অ্যাক্সেস, Value আপডেট, Key মুছে ফেলা, ইটারেশন ইত্যাদি করা যায়।
- Delete:
delete()ফাংশন দ্বারা আপনি Map থেকে একটি Key এবং তার Value মুছে ফেলতে পারেন। - Length: Map-এর লেন্থ বের করতে
len()ফাংশন ব্যবহার করা হয়।
Go-তে Maps ব্যবহার করে আপনি Key-Value Pair ম্যানেজমেন্ট করতে পারবেন এবং ডেটা অ্যাক্সেস ও ম্যানিপুলেশনকে আরও কার্যকরী করতে পারবেন।
Go-তে Map এর ম্যানিপুলেশন (Insert, Delete, Update)
Map হল একটি ডেটা স্ট্রাকচার যা কী (key) এবং মান (value) জোড়া ধারণ করে। Go-তে map একটি অ্যাসোসিয়েটিভ অ্যারে বা হ্যাশ টেবিলের মতো কাজ করে, যেখানে আপনি একটি কী দিয়ে মান অ্যাক্সেস করতে পারেন। map গুলি ডাইনামিকভাবে সাইজ হতে পারে, এবং এগুলি খুবই দ্রুত key-value পেয়ার অনুসন্ধান করতে সহায়ক।
১. Map ডিফাইনেশন এবং Initialization
Go তে একটি map তৈরি করতে make ফাংশন বা লিটারাল সিনট্যাক্স ব্যবহার করা হয়।
১.১ Map ডিফাইনেশন এবং Initialization
package main
import "fmt"
func main() {
// Make ফাংশন দিয়ে map তৈরি করা
m := make(map[string]int)
// মান সেট করা
m["Alice"] = 30
m["Bob"] = 25
fmt.Println(m) // আউটপুট: map[Alice:30 Bob:25]
}এখানে, m একটি map যার কী টাইপ string এবং মানের টাইপ int। make(map[string]int) ফাংশন দ্বারা একটি খালি map তৈরি করা হয়েছে।
২. Map-এ Insert (এন্ট্রি ইনসার্ট করা)
Map এ একটি নতুন কী-value পেয়ার ইনসার্ট করতে, আপনি সোজা ডট অপারেটর দিয়ে মান অ্যাসাইন করতে পারেন।
২.১ Insert Example
package main
import "fmt"
func main() {
// Map তৈরি
m := make(map[string]int)
// নতুন কী-value পেয়ার ইনসার্ট
m["John"] = 40
m["Alice"] = 25
fmt.Println(m) // আউটপুট: map[John:40 Alice:25]
}এখানে, "John" এবং "Alice" কী দুটি নতুন value পেয়ার 40 এবং 25 সাথে ইনসার্ট করা হয়েছে।
৩. Map থেকে Delete (এন্ট্রি মুছে ফেলা)
Map থেকে একটি কী-value পেয়ার মুছে ফেলতে, Go তে delete() ফাংশন ব্যবহার করা হয়।
৩.১ Delete Example
package main
import "fmt"
func main() {
// Map তৈরি
m := map[string]int{
"John": 40,
"Alice": 25,
"Bob": 30,
}
fmt.Println("Before delete:", m) // আউটপুট: map[John:40 Alice:25 Bob:30]
// Bob এর entry মুছে ফেলা
delete(m, "Bob")
fmt.Println("After delete:", m) // আউটপুট: map[John:40 Alice:25]
}এখানে, delete(m, "Bob") দ্বারা "Bob" নামক কী-টির মানটি মুছে দেওয়া হয়েছে।
৪. Map-এ Update (এন্ট্রি আপডেট করা)
Map-এ একটি কী-এর মান আপডেট করতে, আপনি কেবল ওই কী-এর জন্য নতুন মান অ্যাসাইন করতে পারেন। এটি ইনসার্টের মতোই কাজ করে, কিন্তু যদি কী-টি আগে থেকেই উপস্থিত থাকে, তবে এর মান আপডেট হয়।
৪.১ Update Example
package main
import "fmt"
func main() {
// Map তৈরি
m := map[string]int{
"John": 40,
"Alice": 25,
}
fmt.Println("Before update:", m) // আউটপুট: map[John:40 Alice:25]
// John এর বয়স আপডেট করা
m["John"] = 45
fmt.Println("After update:", m) // আউটপুট: map[John:45 Alice:25]
}এখানে, "John" এর বয়স ৪০ থেকে ৪৫ এ আপডেট করা হয়েছে।
৫. Map-এর উপস্থিতি চেক করা
আপনি যদি জানতে চান যে একটি কী map-এ রয়েছে কিনা, তাহলে value, ok := m[key] এই সিনট্যাক্স ব্যবহার করা যেতে পারে। এখানে, ok একটি বুলিয়ান মান প্রদান করবে, যা true হলে মানটি map-এ পাওয়া গেছে এবং false হলে মানটি উপস্থিত নেই।
৫.১ Map-এর উপস্থিতি চেক করা
package main
import "fmt"
func main() {
// Map তৈরি
m := map[string]int{
"John": 40,
"Alice": 25,
}
// উপস্থিতি চেক করা
value, ok := m["Alice"]
if ok {
fmt.Println("Alice's age is:", value) // আউটপুট: Alice's age is: 25
} else {
fmt.Println("Alice not found!")
}
// যদি একটি কী map-এ না থাকে
value, ok = m["Bob"]
if ok {
fmt.Println("Bob's age is:", value)
} else {
fmt.Println("Bob not found!") // আউটপুট: Bob not found!
}
}এখানে, m["Alice"] এর মান পাওয়া গেলে, তা value তে রাখা হয় এবং ok true হবে। অন্যথায়, ok false হয়ে যাবে।
সারসংক্ষেপ
- Insert: map-এ একটি নতুন কী-value পেয়ার ইনসার্ট করতে সরাসরি কী ব্যবহার করে মান অ্যাসাইন করা হয়।
- Delete: map থেকে একটি কী-value পেয়ার মুছে ফেলতে
delete()ফাংশন ব্যবহার করা হয়। - Update: map-এ একটি কী-এর মান আপডেট করতে, আপনি সেই কী-টির জন্য নতুন মান অ্যাসাইন করতে পারেন।
- Map উপস্থিতি চেক: map-এ একটি কী উপস্থিত কিনা তা চেক করতে
value, ok := m[key]ব্যবহার করা হয়।
Go তে Maps ব্যবহারের মাধ্যমে ডেটা দ্রুত অ্যাক্সেস, ইনসার্ট, ডিলিট এবং আপডেট করা সম্ভব, যা কোডের কার্যকারিতা ও মেমরি ব্যবস্থাপনা বাড়ায়।
Go-তে Maps এবং Iteration এর সাথে Range এর ব্যবহার
Go তে Maps একটি অত্যন্ত শক্তিশালী ডেটা স্ট্রাকচার, যা key-value পেয়ার ব্যবহার করে ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। Iteration এবং Range এগুলোর সাথে ব্যবহৃত একটি গুরুত্বপূর্ণ কৌশল, যা আপনাকে ম্যাপের মধ্যে থাকা ডেটার উপরে লুপ চালাতে সাহায্য করে।
১. Maps in Go (ম্যাপস)
Map হল একটি ডেটা স্ট্রাকচার যা key-value পেয়ার ধারণ করে। এতে কোনো একটি key এর মাধ্যমে তার মান (value) অ্যাক্সেস করা যায়। Go-তে map ডেটা টাইপটি ডিক্লেয়ার করতে {} ব্র্যাকেট ব্যবহার করা হয়।
১.১ Map ডিফাইনেশন এবং ইনিশিয়ালাইজেশন
package main
import "fmt"
func main() {
// Map ডিফাইন করা
var m map[string]int
// Map ইনিশিয়ালাইজ করা
m = make(map[string]int)
// Map-এ key-value পেয়ার অ্যাসাইন করা
m["Alice"] = 25
m["Bob"] = 30
// Map প্রিন্ট করা
fmt.Println(m)
}এখানে, m একটি map[string]int টাইপের ম্যাপ, যেখানে string হল key এবং int হল value। make(map[string]int) দ্বারা ম্যাপটি ইনিশিয়ালাইজ করা হয়েছে এবং তারপরে key ও value অ্যাসাইন করা হয়েছে।
আউটপুট:
map[Alice:25 Bob:30]১.২ Map ডিফাইন এবং ইনিশিয়ালাইজ করার আরো সহজ উপায়
এছাড়াও, আপনি ম্যাপটি সরাসরি এক্সপ্রেশন দিয়ে ডিফাইন এবং ইনিশিয়ালাইজ করতে পারেন।
package main
import "fmt"
func main() {
// Directly initializing a map with values
m := map[string]int{
"Alice": 25,
"Bob": 30,
}
fmt.Println(m)
}এখানে, ম্যাপটি সরাসরি map[string]int টাইপের ভ্যালু দিয়ে ইনিশিয়ালাইজ করা হয়েছে।
আউটপুট:
map[Alice:25 Bob:30]২. Map Iteration using Range (Map ইটারেশন রেঞ্জ ব্যবহার করে)
Go-তে ম্যাপের মধ্যে ইটারেট করতে range কিওয়ার্ড ব্যবহার করা হয়। range ব্যবহার করলে ম্যাপের প্রতিটি key-value পেয়ার সহজে এক্সেস করা যায়।
২.১ Map Iteration উদাহরণ
package main
import "fmt"
func main() {
m := map[string]int{
"Alice": 25,
"Bob": 30,
"Eve": 22,
}
// range দিয়ে ম্যাপের উপর ইটারেশন করা
for key, value := range m {
fmt.Println(key, value)
}
}এখানে, range m ম্যাপের প্রতিটি key-value পেয়ার একে একে ফেচ করে এবং key এবং value ভেরিয়েবলগুলিতে সেট করে। এই পদ্ধতিতে আমরা সহজে ম্যাপের প্রতিটি উপাদান প্রিন্ট করতে পারি।
আউটপুট:
Alice 25
Bob 30
Eve 22২.২ Map Iteration with Only Keys or Values
আপনি যদি শুধুমাত্র key বা value এক্সেস করতে চান, তবে আপনি range এর মধ্যে একাধিক ভেরিয়েবল ব্যবহার না করে একটিই ব্যবহার করতে পারেন।
- শুধুমাত্র key প্রিন্ট করা:
package main
import "fmt"
func main() {
m := map[string]int{
"Alice": 25,
"Bob": 30,
"Eve": 22,
}
for key := range m {
fmt.Println(key)
}
}আউটপুট:
Alice
Bob
Eve- শুধুমাত্র value প্রিন্ট করা:
package main
import "fmt"
func main() {
m := map[string]int{
"Alice": 25,
"Bob": 30,
"Eve": 22,
}
for _, value := range m {
fmt.Println(value)
}
}এখানে, _ দিয়ে key কে উপেক্ষা করা হয়েছে এবং শুধুমাত্র value আউটপুট করা হয়েছে।
আউটপুট:
25
30
22৩. Map Key Existence Checking (ম্যাপের Key অস্তিত্ব পরীক্ষা করা)
Go-তে, আপনি value, ok := map[key] সিনট্যাক্স ব্যবহার করে একটি ম্যাপে key এর অস্তিত্ব পরীক্ষা করতে পারেন। যদি key ম্যাপে থাকে, তবে ok ভেরিয়েবল true হবে এবং value সেই key-এর মান ধারণ করবে। যদি key না থাকে, তবে ok হবে false এবং value হবে ডিফল্ট মান।
৩.১ Key Existence Checking উদাহরণ
package main
import "fmt"
func main() {
m := map[string]int{
"Alice": 25,
"Bob": 30,
}
value, ok := m["Alice"]
if ok {
fmt.Println("Alice found, age:", value)
} else {
fmt.Println("Alice not found.")
}
// Key not found example
value, ok = m["Eve"]
if ok {
fmt.Println("Eve found, age:", value)
} else {
fmt.Println("Eve not found.")
}
}এখানে, m["Alice"] এবং m["Eve"] এর অস্তিত্ব পরীক্ষা করা হয়েছে।
আউটপুট:
Alice found, age: 25
Eve not found.সারসংক্ষেপ
- Maps: Go-তে Maps হল এমন একটি ডেটা স্ট্রাকচার যা
key-valueপেয়ার ধারণ করে এবং খুব দ্রুত ডেটা অ্যাক্সেস করতে সহায়ক। - Iteration with Range:
rangeকিওয়ার্ড ব্যবহার করে ম্যাপের উপর সহজভাবে ইটারেশন করা যায়, যা প্রতিটিkey-valueপেয়ারকে একে একে প্রক্রিয়া করতে সাহায্য করে। - Key Existence Checking:
value, ok := map[key]সিনট্যাক্স ব্যবহার করে আপনি সহজে চেক করতে পারেন যে একটি নির্দিষ্ট key ম্যাপে আছে কিনা।
Go-তে Maps এবং Range এর ব্যবহার খুবই শক্তিশালী এবং এটি আপনাকে একাধিক ডেটার সাথে কার্যকরভাবে কাজ করতে সহায়তা করে।
Read more