मुख्य सामग्री पर जाएं
मॉड्यूल 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: वीईसी पर बुनियादी संचालन

व्यायाम#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::संग्रह::HashMap. मुख्य फ़ंक्शन में, स्ट्रिंग कुंजियों और i32 मानों को संग्रहीत करने के लिए स्कोर नामक एक परिवर्तनीय हैशमैप घोषित करें। उपयोगकर्ता 'ऐलिस' के लिए 50 का स्कोर डालें। गेट विधि का उपयोग करके स्कोर को सुरक्षित रूप से निकालें और इसे प्रिंट करने के लिए अनरैप() करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`std::collections::HashMap; का उपयोग करें`को न भूलें।`scores.insert(String::from("Alice"), 50);`के साथ डालें और`.get("Alice").unwrap()` के साथ मान प्राप्त करें।

3 प्रयासों के बाद समाधान उपलब्ध है

अभ्यास 3: एक वेक्टर में मानों को दोगुना करना

व्यायाम#rust.m7.l1.e3
प्रयास: 0लोड हो रहा है...

डबल_वैल्यू नाम के एक फ़ंक्शन को परिभाषित करें जो पूर्णांक &[i32] के एक टुकड़े के संदर्भ को स्वीकार करता है और एक नया Vec<i32> लौटाता है जिसमें समान तत्वों को 2 से गुणा किया जाता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

फ़ंक्शन को स्लाइस के तत्वों पर पुनरावृति करनी चाहिए और उन्हें वापस किए जाने वाले नए वेक्टर में 2 से गुणा करना चाहिए।

3 प्रयासों के बाद समाधान उपलब्ध है