ট্র্যাক
/
Rust
Rust
/
সিলেবাস
/
হ্যাশম্যাপ
হ্

হ্যাশম্যাপ মধ্যে Rust

{one: "১টি অনুশীলনী", other: "%{count}টি অনুশীলনী"}

হ্যাশম্যাপ সম্পর্কে

HashMap হলো একটি কন্টেইনার, যা কী (key)-মান জোড়া সংরক্ষণ করতে ব্যবহার করা যায়। অন্য প্রোগ্রামিং ভাষায় এই ডেটা স্ট্রাকচারকে মাঝে মাঝে অ্যাসোসিয়েটিভ অ্যারে বা হ্যাশ টেবিল বলা হয়। ম্যাপে কী (key)-এর একটি সেট থাকে, যার প্রত্যেকটি একটি নির্দিষ্ট মানের সাথে ম্যাপ করা থাকে। ব্যবহারকারী উপযুক্ত কী (key) পাস করে সংরক্ষিত মান রিট্রিভ করতে পারেন। ব্যবহারকারীরা কী (key) এবং সংশ্লিষ্ট মান ইনসার্ট ও ডিলিটও করতে পারেন।

HashMap একটি জেনেরিক কলেকশন (স্ট্যান্ডার্ড লাইব্রেরির বেশিরভাগ কলেকশনের মতোই) এবং তাই কী (key) হিসেবে বিস্তৃত ধরনের টাইপ সমর্থন করে, যার মধ্যে ইউজার-ডিফাইন্ড স্ট্রাক্ট ও টুপলও রয়েছে। এর মানগুলি যেকোনো টাইপের হতে পারে।

একটি HashMap তৈরি করা

HashMap তৈরি করা হয় HashMap::new() ফাংশন ব্যবহার করে। নিচের কোডটি টিমের নামের সাথে স্কোর ম্যাপ করা একটি HashMap তৈরি করে।

use std::collections::HashMap;

let mut scores = HashMap::new();

scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);

HashMap-এ মান অ্যাক্সেস করা

HashMap-এর মধ্যে কোনো মান আছে বলে জানা থাকলে ইনডেক্সিং অপারেটর ([]) ব্যবহার করা উপযুক্ত। উদাহরণস্বরূপ, নীল দলের স্কোর রিট্রিভ করতে আমরা scores["Blue"] ব্যবহার করতে পারি। তবে হ্যাশম্যাপের মধ্যে উপযুক্ত কী (key)-মান জোড়া না থাকলে এই অপারেশনটি প্যানিক করবে।

ইনডেক্সিং অপারেটর ছাড়া HashMap-এ সংরক্ষিত মান অ্যাক্সেস করার আরও দুটি উপায় আছে। প্রথমটি হলো get মেম্বার ফাংশন ব্যবহার করা:

if let Some(blue_score) = scores.get("Blue") {
    println!("Blue scored: {blue_score} \n");
}

get অনুরোধ করা কী (key)-এর বিপরীতে সংরক্ষিত মান অ্যাক্সেস করে। সরবরাহ করা কী (key) HashMap-এ না থাকলে এটি None রিটার্ন করে, আর কী (key) থাকলে Some(value) রিটার্ন করে। Rust-এ Options সম্পর্কে আরও জানতে Options কনসেপ্ট দেখুন।

HashMap-এ সংরক্ষিত মান অ্যাক্সেস করার অন্য উপায় হলো entry মেথড ব্যবহার করা। entry মেথড (বা entry API) HashMap-এ কী (key)-মান জোড়ার এন্ট্রির একটি রেফারেন্স রিটার্ন করে। এন্ট্রি হ্যাশে এই কী (key)-এর অবস্থা বোঝায়। কী (key) না থাকলে এন্ট্রিতে কোনো মান থাকে না (এবং এটি একটি মান ইনসার্ট করার সুযোগ দেয়)।

let mut vote_counter: HashMap<_, usize> = HashMap::new();
let votes = ["Blue", "Red", "Red", "Blue", "Red", "Blue", "Blue"];
for vote in votes {
    let count = vote_counter.entry(vote).or_default();
    *count += 1;
}

println!("{vote_counter:#?}");

এই API নির্দিষ্ট কিছু কমন অ্যাক্সেস প্যাটার্নকে খুব সুবিধাজনক করে তোলে; এর জন্য একটি সম্পূর্ণ কনসেপ্ট (Entry API) উৎসর্গ করা হয়েছে।

দক্ষতা

HashMapগুলি তুলনামূলকভাবে দ্রুত, এবং একটি কী (key) জড়িত সব অপারেশনের জন্য অ্যামোর্টাইজড কনস্ট্যান্ট-টাইম কমপ্লেক্সিটি (O(1)) রয়েছে।

ট্রেইট বাউন্ড

HashMap একটি জেনেরিক ডেটা স্ট্রাকচার, অর্থাৎ এটি কী (key) ও মান হিসেবে যেকোনো টাইপ ব্যবহার সমর্থন করে, কেবল একটি সীমাবদ্ধতাসহ: কোনো টাইপকে কী (key) টাইপ হিসেবে ব্যবহার করতে হলে তার দুটি ট্রেইটের ইমপ্লিমেন্টেশন থাকতে হবে: Eq এবং Hash। মান টাইপের উপর কোনো ট্রেইট বাউন্ড নেই।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে