RUST 筆記(四)
通用集合 vector、字串、 雜湊 map
vector(可以理解為list)
- 初始化
let v: Vec<i32> = Vec::new();
使用初始值來建立 vec! 巨集:let v = vec![1, 2, 3];
- 使用 vector
//新增值 v.push(5); //讀取值 let v = vec![1, 2, 3, 4, 5]; let third: &i32 = &v[2]; // 訪問不存在的元素時 Rust 會造成 panic! let third: Option<&i32> = v.get(2); // Some(&element) 或 None 的邏輯 //遍歷讀 let v = vec![100, 32, 57]; for i in &v { println!("{}", i); } //遍歷寫 let mut v = vec![100, 32, 57]; for i in &mut v { *i += 50; }
- vector 只能儲存一種型別,如果需要多種型別,使用列舉
enum SpreadsheetCell { Int(i32), Float(f64), Text(String), } let row = vec![ SpreadsheetCell::Int(3), SpreadsheetCell::Text(String::from("blue")), SpreadsheetCell::Float(10.12), ];
字串 str String
Rust 的核心語言中只有一種字串型別:str。字串 slice,它通常以被借用的形式出現,&str
String 型別字串是由標準庫提供的,而沒有寫進核心語言部分,它是可增長的、可變的、有所有權的、UTF-8 編碼的字串型別。
-
新建字串
let mut s = String::new(); let data = "initial contents"; let s = data.to_string(); let s = String::from("initial contents");
-
更新字串
- 通過 push_str 方法來附加字串 slice,從而使 String 變長:s.push_str(“bar”);
- push 方法被定義為獲取一個單獨的字元作為引數,並附加到 String 中:s.push(‘l’);
-
字串使用 + 運算子
- add 函式限制,只能將 &str 和 String 相加,不能將兩個 String 值相加
- 字串作為引數傳入時 &String 預設可以被強轉(coerced)為 &str
-
字串format
format! 與 println! 的工作原理相同,不過不同於將輸出列印到螢幕上,它返回一個帶有結果內容的 String
let s = format!("{}-{}-{}", s1, s2, s3); 替代 let s = s1 + “-” + &s2 + “-” + &s3;
-
字串用不可以索引取值
- 字串基於 vector 實現
- 英文佔一個位元組,中文佔兩個位元組。
- 區分英文位元組、中文位元組(unicode)、字元(最接近人們眼中字母的概念)。最終都以以utf-8形式儲存,儲存形式是ascii[224, 164, 168]
-
擷取部分字串
- 索引超出會在執行時會 panic,程式崩潰
let hello = “Здравствуйте”;
let s = &hello[0…4]; // s 將會是 “Зд” - 從字串中獲取字形簇是很複雜的,所以標準庫並沒有提供這個功能
- 索引超出會在執行時會 panic,程式崩潰
-
遍歷字串
chars方法、bytes方法for c in "नमस्ते".chars() { println!("{}", c); }
雜湊 map HashMap<K, V>儲存鍵值對
-
hashMap 需要引入庫
use std::collections::HashMap
-
新插入或更新
map.insert(String::from("Blue"), 10);
-
像 vector 一樣,雜湊 map 將它們的資料儲存在堆上。同樣類似於 vector,雜湊 map 是同質的:所有的鍵必須是相同型別,值也必須都是相同型別。
-
兩個元組也可以生成一個雜湊map:
let map: HashMap<_, _> = 元組1.iter().zip(元組2.iter()).collect();
-
所有權:一旦鍵值對被插入後就為雜湊 map 所擁有
-
獲取map中的值map.get(),返回Option
-
遍歷
for (key, value) in &scores { println!("{}: {}", key, value); }
-
只在鍵不存在時插入
- entry 函式的返回值是一個列舉,Entry,它代表了可能存在也可能不存在的值。
- 不存在就插入:
map.entry(String::from("Yellow")).or_insert(50);
並返回修改過的 Entry 的建的值得一個可變引用(&mut V),如果需要賦值,需要解引用,用星號(*)解引用
相關文章
- RUST 筆記(三)Rust筆記
- RUST 筆記(一)Rust筆記
- RUST 筆記(二)Rust筆記
- Rust 學習筆記Rust筆記
- TS學習筆記(四)筆記
- ONNXRuntime學習筆記(四)筆記
- Spring筆記(四)整合MybatisSpring筆記MyBatis
- springboot 學習筆記(四)Spring Boot筆記
- goLang學習筆記(四)Golang筆記
- DP學習筆記(四)(2024.10.2)筆記
- c++學習筆記(四)C++筆記
- 四元數 學習筆記筆記
- activiti學習筆記(四)managementService筆記
- 刷前端面經筆記(四)前端筆記
- Docker筆記四之執行MySQLDocker筆記MySql
- ES6 學習筆記四筆記
- Kubernetes學習筆記(四):服務筆記
- 四:GTID中的運維(筆記)運維筆記
- TS學習筆記(四):函式筆記函式
- Docker筆記(四):Docker映象管理Docker筆記
- Gradle外掛學習筆記(四)Gradle筆記
- Linux 筆記分享四:Shell 基礎Linux筆記
- 007 Rust死靈書筆記之引用與別名Rust筆記
- 哲學筆記——叔本華《續四》筆記
- Java學習筆記 第四天Java筆記
- 從零開始學Electron筆記(四)筆記
- 李巨集毅深度學習 筆記(四)深度學習筆記
- springcloud學習筆記(四)Spring Cloud HystrixSpringGCCloud筆記
- Java中的四大引用筆記Java筆記
- 001 通過連結串列學習Rust筆記之前言Rust筆記
- 001 透過連結串列學習Rust筆記之前言Rust筆記
- rust學習四、控制語句Rust
- 用 Rust 刷 leetcode 第四題RustLeetCode
- 龍哥盟-PMP-課程筆記-四-筆記
- 圖論進階學習筆記(四)(2024.10.4)圖論筆記
- 北航OS課程筆記--四、程序管理筆記
- webrtc QOS筆記四 Nack機制淺析Web筆記
- Vue學習筆記(四) 久處不厭Vue筆記