সরাসরি প্রধান সামগ্রীতে চলে যান

Rust-এ হ্যাশ ম্যাপ (Hash Map) ব্যবহার করার সহজ গাইড

Introduction আজকের এই আলোচনায় আমরা শিখব কীভাবে Rust প্রোগ্রামিং ল্যাঙ্গুয়েজে Hash Maps ব্যবহার করতে হয়। সাধারণত ডেটা সেভ করার জন্য আমরা ভেক্টর (Vectors) বা অ্যারে ব্যবহার করি যেখানে ইনডেক্স (০, ১, ২...) দিয়ে ডেটা খুঁজতে হয়। কিন্তু হ্যাশ ম্যাপ আমাদের এমন সুবিধা দেয় যেখানে আমরা যেকোনো "Key" (যেমন নাম বা আইডি) ব্যবহার করে তার সাথে জড়িত "Value" খুঁজে পেতে পারি। এটি অনেকটা ডিকশনারির মতো কাজ করে।


১. হ্যাশ ম্যাপ কী এবং কেন ব্যবহার করবেন?

হ্যাশ ম্যাপ হলো একটি কালেকশন যা Key-Value Pair হিসেবে ডেটা জমা রাখে। এটি অন্যান্য ল্যাঙ্গুয়েজে ডিকশনারি বা অবজেক্ট নামেও পরিচিত।

রেফারেন্স: [00:22] এখানে K মানে Key এবং V মানে Value। এটি মেমরিতে ডেটা রাখার জন্য একটি 'Hash Function' ব্যবহার করে। যেমন- একটি গেমে টিমের নাম (Key) এবং তাদের স্কোর (Value) সেভ করে রাখা।

সহজ ভাষায় ব্যাখ্যা: ধরুন আপনার কাছে একটি টেলিফোন ডাইরেক্টরি আছে। সেখানে মানুষের নাম হলো "Key" আর তাদের ফোন নম্বর হলো "Value"। নাম খুঁজলে আপনি নম্বর পেয়ে যাচ্ছেন—এটাই হ্যাশ ম্যাপের কাজ।


২. হ্যাশ ম্যাপ তৈরি এবং ডেটা ইনসার্ট করা

Rust-এ হ্যাশ ম্যাপ ব্যবহার করতে হলে প্রথমেই এটিকে ইমপোর্ট করতে হয়, কারণ এটি ডিফল্টভাবে (Prelude) থাকে না।

রেফারেন্স: [01:27]

Rust

use std::collections::HashMap; // প্রথমে ইমপোর্ট করতে হবে

fn main() {
    let mut scores = HashMap::new(); // নতুন একটি হ্যাশ ম্যাপ তৈরি

    // ডেটা ইনসার্ট করা
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 20);
    
    println!("{:?}", scores);
} 

কোড ব্যাখ্যা:

  • use std::collections::HashMap;: এই লাইনটি Rust-কে বলে যে আমরা হ্যাশ ম্যাপ লাইব্রেরি ব্যবহার করতে চাই।

  • HashMap::new(): এটি একটি খালি ম্যাপ তৈরি করে।

  • .insert(): এই মেথড দিয়ে আমরা ম্যাপের ভেতরে ডেটা ঢোকাই। এখানে "Blue" হলো চাবি (Key) আর 10 হলো তার মান (Value)।


৩. হ্যাশ ম্যাপ থেকে ডেটা বের করা (Accessing Values)

ম্যাপে ডেটা রাখার পর সেটা কীভাবে ফিরে পাবেন, তা নিচে দেখানো হলো।

রেফারেন্স: [04:12]

Rust

let team_name = String::from("Blue");
let score = scores.get(&team_name).copied().unwrap_or(0);

println!("Blue team score: {}", score); 

কোড ব্যাখ্যা:

  • .get(&team_name): এটি ওই চাবির বিপরীতে থাকা ভ্যালু খুঁজে আনে। এটি একটি Option টাইপ রিটার্ন করে (কারণ চাবিটি নাও থাকতে পারে)।

  • .unwrap_or(0): যদি চাবিটি না পাওয়া যায়, তবে এটি ডিফল্টভাবে '0' রিটার্ন করবে।


৪. হ্যাশ ম্যাপের ওনারশিপ (Ownership)

Rust-এ ওনারশিপ খুব গুরুত্বপূর্ণ। আপনি যখন কোনো String হ্যাশ ম্যাপে ঢুকিয়ে দেন, তখন সেই স্ট্রিংটির মালিকানা ম্যাপের কাছে চলে যায়।

রেফারেন্স: [07:41] সহজ কথায়, আপনি যদি একটি ভেরিয়েবল হ্যাশ ম্যাপে ইনসার্ট করেন, তবে পরে সেই ভেরিয়েবলটি সরাসরি আর ব্যবহার করতে পারবেন না কারণ ম্যাপ এখন সেটার মালিক। তবে নম্বর বা ইনটিজারের ক্ষেত্রে এটি কপি হয়ে যায়, তাই সমস্যা হয় না।

কঠিন শব্দের সহজ অর্থ:

  • Ownership (ওনারশিপ): মেমরিতে ডেটার মালিক কে, তা নির্ধারণ করার নিয়ম।

  • Generics (জেনেরিকস): এটি এমন একটি সিস্টেম যা দিয়ে আমরা নির্দিষ্ট কোনো টাইপ না বলে সব ধরনের ডেটার জন্য কোড লিখতে পারি (যেমন Key-Value যেকোনো টাইপ হতে পারে)।


৫. ভ্যালু আপডেট করা এবং লুপ চালানো

আপনি চাইলে পুরনো ভ্যালু মুছে নতুন ভ্যালু দিতে পারেন অথবা আগের ভ্যালুর সাথে কিছু যোগ করতে পারেন।

রেফারেন্স: [09:45]

Rust

// যদি চাবি না থাকে তবেই ইনসার্ট করো
scores.entry(String::from("Red")).or_insert(50);

// টেক্সটে কতবার একটি শব্দ আছে তা গোনা (Word Count)
let text = "hello world wonderful world";
let mut map = HashMap::new();

for word in text.split_whitespace() {
    let count = map.entry(word).or_insert(0);
    *count += 1; // আগের ভ্যালুর সাথে ১ যোগ করা
} 

কোড ব্যাখ্যা:

  • .entry().or_insert(): এই লাইনটি চেক করে যে ম্যাপে ওই চাবিটি আছে কি না। না থাকলে এটি নতুন করে ভ্যালু বসিয়ে দেয়।

  • *count += 1: এখানে * চিহ্নটি দিয়ে আমরা মেমরি লোকেশনে সরাসরি ভ্যালু আপডেট করছি (একে বলে De-referencing)।


আমার এনালাইসিস ও শেষ কথা

কন্টেন্ট ক্রিয়েটর পীযূষ গর্গ এখানে Rust-এর একটি অত্যন্ত শক্তিশালী ডেটা স্ট্রাকচারকে খুব সহজভাবে ব্যাখ্যা করেছেন। হ্যাশ ম্যাপ মূলত ডেটা খোঁজার গতি অনেক বাড়িয়ে দেয়।

আমার চিন্তা ও পরামর্শ:

  • নিরাপত্তা: Rust ডিফল্টভাবে 'SipHash' নামক একটি অ্যালগরিদম ব্যবহার করে যা সাইবার অ্যাটাক (DOS attack) থেকে রক্ষা করে। এটি কিছুটা ধীর হতে পারে, তবে নিরাপত্তার জন্য সেরা।

  • বিকল্প: আপনার যদি ডেটা খোঁজার গতি আরও বেশি দরকার হয় এবং নিরাপত্তা নিয়ে চিন্তা কম থাকে, তবে আপনি crate.io থেকে অন্য কোনো দ্রুতগতির হ্যাশার লাইব্রেরি ব্যবহার করতে পারেন।

  • কখন ব্যবহার করবেন: যখন আপনার কাছে প্রচুর ডেটা আছে এবং আপনি ইনডেক্স নম্বরের বদলে নাম বা আইডি দিয়ে দ্রুত ডেটা খুঁজতে চান, তখনই হ্যাশ ম্যাপ ব্যবহার করা বুদ্ধিমানের কাজ হবে।

সব মিলিয়ে, Rust-এর কালেকশনগুলোর মধ্যে হ্যাশ ম্যাপ শেখাটা আপনার কোডিং দক্ষতাকে অনেক উচ্চতায় নিয়ে যাবে। নিয়মিত প্র্যাকটিস করুন!

[

Storing Keys with Associated Values in Hash Maps | Rust Book

Piyush Garg · 1.8K views

](http://www.youtube.com/watch?v=WTrp4OoAX6M)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...