Rust基礎(chǔ)學(xué)習(xí)-14-HashMap的基本應(yīng)用

HashMap 用于存儲鍵值對,類似于其他編程語言中的字典。在標(biāo)準(zhǔn)庫的定義是 HashMap<K, V> ,下面將用代碼解釋 HashMap 的基本使用。

use std::collections::HashMap;

fn main() {
    // 先定義一個(gè)hashmap, 然后插入值
    let mut scores = HashMap::new();
    scores.insert(1001, 100);
    scores.insert(1002, 200);
    scores.insert(1003, 300);
    println!("原始map: {:?}", scores);

    // 判斷是否存在某個(gè)Key
    let has1001 = scores.contains_key(&1001);
    println!("是否有key 1001: {}", has1001);
    
    // 移除一個(gè)值,參數(shù)是key的引用
    scores.remove(&1001);
    println!("移除 1001 后: {:?}", scores);
    
    // 插入一個(gè)已經(jīng)存在的值將覆蓋原有值
    scores.insert(1002, 101);
    println!("覆蓋 1002的值: {:?}", scores);

    // 如果一個(gè)鍵不存在,則插入新的鍵值對,如果存在,則什么也不做
    scores.entry(1002).or_insert(500);
    println!("如果 1002 不存在,則插入key 1002, value 500: {:?}", scores);

    scores.entry(1004).or_insert(700);
    println!("如果 1004 不存在,則插入key 1004, value 700: {:?}", scores);

    // 獲取一個(gè)鍵的值,如果存在,返回類型是枚舉 Option<T>
    // 如果有值,則返回值Some(T),沒有則返回None
    let value_1004 = scores.get(&1004);
    println!("獲取1004的value: {:?}", value_1004);

    let value_2000 = scores.get(&2000);
    println!("獲取2000的value: {:?}", value_2000);
    
    // 先獲取原始值,的引用,然后改變原始值
    let value_1003 = scores.entry(1003).or_insert(0);
    *value_1003 += 54;
    println!("在原始1003的值的基礎(chǔ)上,加上54: {:?}", scores);
}

上面的代碼使用最基本的拷貝類型 i32 作為鍵和值解釋了一個(gè) HashMap 基本的方法應(yīng)用,更詳細(xì)的方法可以參考 HashMap的文檔

下面看一下以String類型作為 key 和 value 會怎么樣

use std::collections::HashMap;

fn main() {
    let key = "Jack".to_string();
    let value = "上海市浦東新區(qū)".to_string();

    let mut map:HashMap<String, String> = HashMap::new();
    map.insert(key, value);

    println!("map: {:?}", map);
    
    // println!("{} {}", key, value);
}

上面代碼中,看最后一句被注釋掉的代碼,如果去掉注釋,將編譯出錯(cuò),因?yàn)槲覀兌x的 keyvalueString類型的,在插入到 hashmap 后,keyvalue 的的所有權(quán)將移動到 hashmap 中,所以再訪問就會出錯(cuò)。

上面第7行代碼,定義一個(gè) HashMap 時(shí),我們給map變量指定了具體的HashMap類型,這里不指定也行,Rust會根據(jù)上下文自動推斷中 HashMap 中存儲的數(shù)據(jù)類型。

let mut map = HashMap::new();

這里只是簡單地介紹了一下 HashMap 的一些應(yīng)用,更復(fù)雜的使用將在后面的博客中詳細(xì)介紹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容