মূল কন্টেন্টে যান
মডিউল 7 · 1-এর পাঠ 2কোর্সে 13/14~12 min
মডিউল পাঠ (1/2)

সংগ্রহ এবং হ্যাশম্যাপ

সংগ্রহ হল একাধিক মান ধারণ করতে সক্ষম ডেটা স্ট্রাকচার। আদিম অ্যারে এবং টিপল প্রকারের বিপরীতে, এই সংগ্রহের রেফারেন্সগুলি হিপ-এ সংরক্ষিত হয়, যার অর্থ কম্পাইলের সময় ডেটার পরিমাণ জানার প্রয়োজন নেই এবং প্রোগ্রাম নির্বাহের সময় **গতিশীলভাবে বৃদ্ধি বা সঙ্কুচিত হতে পারে।

মরিচায় সর্বাধিক ব্যবহৃত দুটি সংগ্রহ হল ভেক্টর (Vec<T>) এবং কী-মান মানচিত্র (HashMap<K, V>)।


ভেক্টর (Vec<T>)

ভেক্টর আপনাকে একটি একক ডেটা কাঠামোতে একই ধরণের একাধিক মান সংরক্ষণ করতে দেয় যা মেমরিতে একে অপরের পাশে সমস্ত মান রাখে:

Rust
fn main() {
    // Creating an empty mutable vector
    let mut v: Vec<i32> = Vec::new();

    // Or using the vec! macro
    let mut v2 = vec![1, 2, 3];

    // Appending elements
    v.push(5);
    v.push(6);

    // Accessing elements by index
    let third = v2[2];
    println!("The third element is: {}", third);
}

হ্যাশম্যাপ (HashMap<K, V>)

HashMap<K, V> সংগ্রহটি K প্রকারের কীগুলির একটি ম্যাপিং সঞ্চয় করে V প্রকারের মানগুলিতে৷ এটি একটি হ্যাশিং ফাংশনের মাধ্যমে কাজ করে, যা নির্ধারণ করে কিভাবে এই কী এবং মানগুলি মেমরিতে রাখা হয়। এটি অত্যন্ত কার্যকর যখন আপনি একটি সংখ্যাসূচক সূচক দ্বারা নয়, কিন্তু একটি কী (যেমন একটি নাম বা একটি আইডি) দ্বারা ডেটা সন্ধান করতে চান৷

Rust
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    // Inserting key-value pair
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // Reading a value (returns an Option<&V>)
    let team_name = String::from("Blue");
    let score = scores.get(&team_name);

    match score {
        Some(val) => println!("Score: {}", val),
        None => println!("No score found."),
    }
}

নিজে চেষ্টা করে দেখুন

ব্যায়াম 1: Vec-তে মৌলিক অপারেশন

ব্যায়াম#rust.m7.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

Vec::new() ব্যবহার করে v নামের একটি পরিবর্তনযোগ্য পূর্ণসংখ্যা ভেক্টর ঘোষণা করুন। পুশ পদ্ধতি ব্যবহার করে ক্রমানুসারে 10, 20 এবং 30 উপাদান যোগ করুন। অবশেষে, println ব্যবহার করে ভেক্টরের প্রথম উপাদান (সূচক 0) মুদ্রণ করুন!

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ভেক্টর শুরু করতে `let mut v = Vec::new();` ব্যবহার করুন, `v.push(value)` দিয়ে উপাদান সন্নিবেশ করুন এবং `v[0]` দিয়ে অ্যাক্সেস করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম 2: হ্যাশম্যাপ সহ ব্যবহারকারীর স্কোর

ব্যায়াম#rust.m7.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

std::সংগ্রহ::হ্যাশম্যাপ আমদানি করুন। প্রধান ফাংশনে, স্ট্রিং কী এবং i32 মান সংরক্ষণের জন্য একটি পরিবর্তনযোগ্য হ্যাশম্যাপ নামের স্কোর ঘোষণা করুন। ব্যবহারকারী 'এলিস'-এর জন্য 50 স্কোর সন্নিবেশ করুন। Get মেথড ব্যবহার করে নিরাপদে স্কোর বের করুন এবং এটি প্রিন্ট করতে unwrap() করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ভুলে যাবেন না `std::collections::HashMap;`ব্যবহার করুন।`scores.insert(String::from("Alice"), 50);` দিয়ে সন্নিবেশ করুন এবং`.get("Alice").unwrap()` দিয়ে মান আনুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম 3: একটি ভেক্টর মান দ্বিগুণ

ব্যায়াম#rust.m7.l1.e3
প্রচেষ্টা: 0লোড হচ্ছে...

double_values ​​নামের একটি ফাংশন সংজ্ঞায়িত করুন যা পূর্ণসংখ্যার একটি স্লাইস এবং[i32] এর একটি রেফারেন্স গ্রহণ করে এবং 2 দ্বারা গুণিত একই উপাদান ধারণকারী একটি নতুন Vec<i32> প্রদান করে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ফাংশনটি স্লাইসের উপাদানগুলির উপর পুনরাবৃত্তি করা উচিত এবং ফেরত দেওয়ার জন্য নতুন ভেক্টরে 2 দ্বারা গুণ করে তাদের সন্নিবেশ করা উচিত।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ