欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

rust的vector和hashmap詳解

 更新時(shí)間:2023年03月17日 11:04:14   作者:zy010101  
這篇文章主要介紹了rust的vector和hashmap,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

動(dòng)態(tài)數(shù)組Vector

在大多數(shù)語(yǔ)言中都會(huì)提供動(dòng)態(tài)數(shù)組這樣基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。rust也不例外。動(dòng)態(tài)數(shù)組允許我們存儲(chǔ)多個(gè)值,這些值在內(nèi)存中一個(gè)緊挨著另一個(gè)排列。動(dòng)態(tài)數(shù)組中只能存儲(chǔ)相同類型的元素。

創(chuàng)建動(dòng)態(tài)數(shù)組

使用Vec::new()創(chuàng)建動(dòng)態(tài)數(shù)組或者是使用宏vec![]創(chuàng)建數(shù)組。例如:

fn main() {
    let mut a = Vec::new();
    a.push(1);

    let b = vec![1];

    println!("a:{}", a[0]);
    println!("b:{}", b[0]);
}

rust的編譯器非常智能,它通過a.push(1)推斷出了a的類型是Vec<i32>,如果預(yù)先知道要存儲(chǔ)的元素個(gè)數(shù),可以使用 Vec::with_capacity(capacity) 創(chuàng)建動(dòng)態(tài)數(shù)組,這樣可以避免因?yàn)椴迦氪罅啃聰?shù)據(jù)導(dǎo)致頻繁的內(nèi)存分配和拷貝,提升性能。而通過宏vec![]創(chuàng)建動(dòng)態(tài)數(shù)組可在創(chuàng)建同時(shí)給予初始化值。還有一點(diǎn)需要注意,上例中的a是可變變量,而b是不可變變量。因此無法使用b.push來追加元素。

向數(shù)組末尾追加元素

使用push方法可以向數(shù)組末尾增加元素。需要確保數(shù)組變量是可變變量。例如:

let mut a = Vec::new();
a.push(1);

從Vector中讀取元素

讀取指定位置的元素有兩種方式可選:

  • 通過下標(biāo)索引訪問,直接獲取元素值
  • 使用 get 方法,獲取到Option<&T>

一個(gè)實(shí)際的例子如下所示:

#![allow(unused)]
fn main() {
let v = vec![1, 2, 3, 4, 5];

let third: &i32 = &v[2];
println!("第三個(gè)元素是 {}", third);

match v.get(2) {
        Some(third) => println!("第三個(gè)元素是 {third}"),
        None => println!("去你的第三個(gè)元素,根本沒有!"),
    }
}

和其它語(yǔ)言一樣,集合類型的索引下標(biāo)都是從 0 開始,&v[2] 表示借用 v 中的第三個(gè)元素。如果存在下標(biāo)越界的可能,那么建議使用get來獲取元素,否則還是使用下標(biāo)的方式會(huì)更好。

重提內(nèi)存安全

讓我們首先來回顧一下rust的所有權(quán)系統(tǒng)以及引用(借用)。

所有權(quán)系統(tǒng)

  • Rust 中的每一個(gè)值都有一個(gè) 所有者(owner)。
  • 值在任一時(shí)刻有且只有一個(gè)所有者。
  • 當(dāng)所有者(變量)離開作用域,這個(gè)值將被丟棄。

引用規(guī)則

  • 同一作用域,一個(gè)變量只能有一個(gè)可變引用;
  • 在同一作用域,一個(gè)變量可以有多個(gè)不可變引用,不允許同時(shí)存在可變引用和不可變引用。

現(xiàn)在,讓我們直接看下面這段代碼。

在這里插入圖片描述

hashmap

rust標(biāo)準(zhǔn)庫(kù)提供了hashmap,和其它語(yǔ)言的hashmap, map, object, dict等類似。

創(chuàng)建hashmap

use std::collections::HashMap;

fn main() {
    // 創(chuàng)建一個(gè)HashMap,用于存儲(chǔ)寶石種類和對(duì)應(yīng)的數(shù)量
    let mut my_gems = HashMap::new();
}

HashMap 并沒有包含在 Rust 的 prelude 中,因此需要使用use來引入hashmap。通過new來創(chuàng)建一個(gè)hashmap。也可以有其它的方式來創(chuàng)建hashmap。例如:

let target = [("A", 1), ("B", 2), ("C", 5), ("D", 8)];
let target = HashMap::from(target);
println!("{:?}", target);

新增鍵值對(duì)

使用insert方法即可新增鍵值對(duì)。例如:

// 將寶石類型和對(duì)應(yīng)的數(shù)量寫入表中
my_gems.insert("紅寶石", 1);
my_gems.insert("藍(lán)寶石", 2);
my_gems.insert("河邊撿的誤以為是寶石的破石頭", 18);

需要注意的是 HashMap 也是內(nèi)聚性的,即所有的 K 必須擁有同樣的類型,V 也是如此。跟 Vec 一樣,如果預(yù)先知道要存儲(chǔ)的 KV 對(duì)個(gè)數(shù),可以使用 HashMap::with_capacity(capacity) 創(chuàng)建指定大小的 HashMap,避免頻繁的內(nèi)存分配和拷貝,提升性能。

根據(jù)鍵查詢值

可以通過get方法來根據(jù)鍵名查詢值,不過get方法返回的是Option<&T>類型,需要使用unwrap來解析。例如:

println!("{:?}", my_gems.get("紅寶石").unwrap());

同時(shí)在for循環(huán)中,可以更方便的遍歷hashmap,例如:

for (k, v) in my_gems {
    println!("key is {k}, value is {v}");
}

更新hashmap中的值

fn main() {
    use std::collections::HashMap;

    let mut scores = HashMap::new();

    scores.insert("Blue", 10);

    // 覆蓋已有的值
    let old = scores.insert("Blue", 20);
    assert_eq!(old, Some(10));

    // 查詢新插入的值
    let new = scores.get("Blue");
    assert_eq!(new, Some(&20));

    // 查詢Yellow對(duì)應(yīng)的值,若不存在則插入新值
    let v = scores.entry("Yellow").or_insert(5);
    assert_eq!(*v, 5); // 不存在,插入5

    // 查詢Yellow對(duì)應(yīng)的值,若不存在則插入新值
    let v = scores.entry("Yellow").or_insert(50);
    assert_eq!(*v, 5); // 已經(jīng)存在,因此50沒有插入
}

hashmap提供了兩個(gè)方法,其中insert方法在沒有鍵值對(duì)的情況會(huì)進(jìn)行插入,有鍵值對(duì)的情況下進(jìn)行覆蓋;而or_insert方法在沒有鍵值對(duì)的情況下進(jìn)行插入,有鍵值對(duì)的情況下不插入。

根據(jù)鍵刪除hashmap的鍵值對(duì)

scores.remove("Blue");

使用remove方法即可根據(jù)鍵刪除值。

到此這篇關(guān)于rust的vector和hashmap的文章就介紹到這了,更多相關(guān)rust的vector和hashmap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Rust語(yǔ)言編寫一個(gè)ChatGPT桌面應(yīng)用示例詳解

    使用Rust語(yǔ)言編寫一個(gè)ChatGPT桌面應(yīng)用示例詳解

    這篇文章主要介紹了如何用Rust編寫一個(gè)ChatGPT桌面應(yīng)用,文中有詳細(xì)的流程介紹,對(duì)大家的學(xué)習(xí)或工作有意一定的幫助,需要的朋友可以參考下
    2023-05-05
  • 深入了解Rust中函數(shù)與閉包的使用

    深入了解Rust中函數(shù)與閉包的使用

    本文主要介紹一下Rust函數(shù)相關(guān)的內(nèi)容,首先函數(shù)我們其實(shí)一直都在用,所以函數(shù)本身沒什么可說的,我們的重點(diǎn)是與函數(shù)相關(guān)的閉包、高階函數(shù)、發(fā)散函數(shù),感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • 一步到位,教你如何在Windows成功安裝Rust

    一步到位,教你如何在Windows成功安裝Rust

    一步到位:輕松學(xué)會(huì)在Windows上安裝Rust!想快速掌握Rust編程語(yǔ)言?別再為復(fù)雜教程頭疼!這份指南將手把手帶你順利完成Windows平臺(tái)上的Rust安裝全過程,從此編碼之旅更加順暢無阻,立即閱讀,開始你的Rust編程旅程吧!
    2024-01-01
  • rust延遲5秒鎖屏的實(shí)現(xiàn)代碼

    rust延遲5秒鎖屏的實(shí)現(xiàn)代碼

    這篇文章主要介紹了rust延遲5秒鎖屏的實(shí)現(xiàn)代碼,文中通過實(shí)例代碼也介紹了rust計(jì)算程序運(yùn)行時(shí)間的方法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Rust中的引用與借用舉例詳解

    Rust中的引用與借用舉例詳解

    這篇文章主要給大家介紹了關(guān)于Rust中引用與借用的相關(guān)資料,rust中借用和引用的附帶功效都一樣,就是都有生命周期,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Rust具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于使用rust調(diào)用c++靜態(tài)庫(kù)并編譯nodejs包的問題

    關(guān)于使用rust調(diào)用c++靜態(tài)庫(kù)并編譯nodejs包的問題

    這篇文章主要介紹了使用rust調(diào)用c++靜態(tài)庫(kù)并編譯nodejs包的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

    Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

    系統(tǒng)的開發(fā),測(cè)試和部署離不開環(huán)境變量,今天分享在Rust的系統(tǒng)開發(fā)中,使用dotenvy來讀取和使用環(huán)境變量,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Rust調(diào)用C程序的實(shí)現(xiàn)步驟

    Rust調(diào)用C程序的實(shí)現(xiàn)步驟

    本文主要介紹了Rust調(diào)用C程序的實(shí)現(xiàn)步驟,包括創(chuàng)建C函數(shù)、編譯C代碼、鏈接Rust和C代碼等步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Rust字符串字面值的一些經(jīng)驗(yàn)總結(jié)

    Rust字符串字面值的一些經(jīng)驗(yàn)總結(jié)

    字符串有兩種表現(xiàn)形式,一種是基本類型,表示字符串的切片,以&str表示,另一種是可變的string類型,下面這篇文章主要給大家介紹了關(guān)于Rust字符串字面值的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • rust的nutyp驗(yàn)證和validator驗(yàn)證數(shù)據(jù)的方法示例詳解

    rust的nutyp驗(yàn)證和validator驗(yàn)證數(shù)據(jù)的方法示例詳解

    本文介紹了在Rust語(yǔ)言中,如何使用nuType和validator兩種工具來對(duì)Cargo.toml和modules.rs文件進(jìn)行驗(yàn)證,通過具體的代碼示例和操作步驟,詳細(xì)解釋了驗(yàn)證過程和相關(guān)配置,幫助讀者更好地理解和掌握使用這兩種驗(yàn)證工具的方法,更多Rust相關(guān)技術(shù)資訊,可繼續(xù)關(guān)注腳本之家
    2024-09-09

最新評(píng)論