এসোসিয়েটিভ অ্যারের ব্যবহার

Go:
এসোসিয়েটিভ অ্যারের ব্যবহার

কিভাবে:

Go এ একটি ম্যাপ তৈরি এবং প্রারম্ভ করা নানাবিধ উপায়ে করা যেতে পারে। শুরু করার জন্য এখানে একটি বেসিক উদাহরণ দেওয়া হলো:

package main

import "fmt"

func main() {
    // ম্যাপ ঘোষণা ও প্রারম্ভকরণ
    colors := map[string]string{
        "red":   "#FF0000",
        "green": "#00FF00",
        "blue":  "#0000FF",
    }

    fmt.Println(colors)
    // আউটপুট: map[blue:#0000FF green:#00FF00 red:#FF0000]
}

এলিমেন্ট যোগ বা আপডেট করতে, কী এর সাথে একটি মান অ্যাসাইন করুন এইভাবে:

colors["white"] = "#FFFFFF"
fmt.Println(colors)
// আউটপুট: map[blue:#0000FF green:#00FF00 red:#FF0000 white:#FFFFFF]

একটি মান তার কী দ্বারা অ্যাক্সেস করা সহজ:

fmt.Println("The hex code for red is:", colors["red"])
// আউটপুট: The hex code for red is: #FF0000

একটি এলিমেন্ট মুছে ফেলতে, delete ফাংশন ব্যবহার করুন:

delete(colors, "red")
fmt.Println(colors)
// আউটপুট: map[blue:#0000FF green:#00FF00 white:#FFFFFF]

একটি ম্যাপের উপর ইটারেশন করা একটি for লুপ ব্যবহার করে করা হয়:

for color, hex := range colors {
    fmt.Printf("Key: %s Value: %s\n", color, hex)
}

মনে রাখবেন, Go এ ম্যাপগুলি অর্ডার বিহীন। ইটারেশনের ক্রম গ্যারান্টিড নয়।

গভীর ডুব

Go তে, ম্যাপগুলি হ্যাশ টেবিল হিসাবে বাস্তবায়িত। ম্যাপের প্রতিটি এন্ট্রিতে দুটি আইটেম থাকে: একটি কী এবং একটি মূল্য। এন্ট্রিটি স্টোর করার জন্য কীটি হ্যাশ করা হয়, যা একটি ছোট সেট ডেটার জন্য ধ্রুবক সময় ক্রিয়াকলাপ অনুমতি দেয় এবং যথাযথ হ্যাশিং সহ গড় সময় জটিলতা O(1) এর যা অনেক হ্যাশ সংঘর্ষ সাথে সর্বোচ্চ ক্ষেত্রে O(n) এ অবণতি হতে পারে।

নতুন Go প্রোগ্রামারদের জন্য একটি গুরুত্বপূর্ণ মন্তব্য হল যে ম্যাপের ধরণগুলি রেফারেন্স ধরনের। এর মানে হল যখন আপনি একটি ম্যাপকে একটি ফাংশনে পাস করেন, সেই ফাংশনের মধ্যে ম্যাপটিতে করা কোনও পরিবর্তন কলারের কাছে দৃশ্যমান হয়। এটি বলা চলে, একটি স্ট্রাকচারকে একটি ফাংশনে পাস করার সাথে ভিন্ন, যেখানে স্ট্রাকচারটি কপি করা হয় যদি না এটি পয়েন্টার দ্বারা পাস করা হয়।

যদিও ম্যাপ অ্যাসোসিয়েটিভ অ্যারেগুলিকে জড়িত বেশিভাগ ব্যবহারের ক্ষেত্রে অত্যন্ত বহুমুখী এবং দক্ষ, পারফরম্যান্স-সংবেদনশীল অ্যাপ্লিকেশনগুলিতে, আরও ভবিষ্যতবাণী করা যায় এমন পারফরম্যান্স বৈশিষ্ট্য সহ ডেটা গঠনগুলি ব্যবহার করা উপকারী হতে পারে, বিশেষত যদি কী বিতরণগুলি প্রায়শই সংঘর্ষ ঘটায়।

আরেকটি বিকল্প হিসাবে Go 1.9 থেকে পাওয়া sync.Map বিবেচনা করা যেতে পারে, যা মূলত এমন ক্ষেত্রগুলিতে ব্যবহারের জন্য ডিজাইন করা হয়েছে যেখানে কীগুলি একবার লিখা হয় কিন্তু অনেকবার পঠিত হয়, এই পরিস্থিতিতে দক্ষতা উন্নতিতে সাহায্য করে। তবে, সাধারণ Go অ্যাপ্লিকেশনগুলির জন্য, নিয়মিত ম্যাপ ব্যবহার ঐতিহ্যগত এবং প্রায়শই এর সরলতা এবং ভাষায় সরাসরি সমর্থনের জন্য প্রস্তাবিত পদ্ধতি হয়।