大家好,我是漁夫。
今天我們來(lái)聊聊 Rust 中的map知識(shí),在其他語(yǔ)言一樣,Map 通常指的是一種數(shù)據(jù)結(jié)構(gòu)和一系列操作,用于將一組值映射到另一組值或執(zhí)行某些操作,也就是我們常說(shuō)的鍵值對(duì)。接下來(lái)一起探討 Rust 中map 的基本用法,和常見(jiàn)操作以及一些有用的技巧。
在 Rust 中map是一種非常重要數(shù)據(jù)結(jié)構(gòu),和其他語(yǔ)言類(lèi)似,也是一種鍵-值存儲(chǔ)的集合。它能夠允許你將一個(gè)鍵與一個(gè)值相關(guān)聯(lián),然后就方便通過(guò)鍵來(lái)檢索值。下面是簡(jiǎn)單例子,在 Rust中,map通常通過(guò)std::collections::HashMap來(lái)實(shí)現(xiàn)。
use std::collections::HashMap;fn main() { let mut scores = HashMap::new(); scores.insert("Alice", 100); scores.insert("Bob", 90); scores.insert("Charlie", 95); let alice_score = scores.get("Alice"); match alice_score { Some(score) => println!("Alice's score is: {}", score), None => println!("Alice's score is not available."), }}
運(yùn)行結(jié)果:
Alice's score is: 100[Done] exited with code=0 in 0.689 seconds
在上面的示例中,創(chuàng)建了一個(gè)名為scores的HashMap,并且將三個(gè)鍵值對(duì)插入其中。使用get方法來(lái)檢索 "Alice" 的分?jǐn)?shù)。
在 Rust 語(yǔ)言還是挺好用的這些匹配規(guī)則。
如果你要向HashMap中插入新的鍵值對(duì),可以使用insert方法。如果鍵已經(jīng)存在,它將把值覆蓋掉。
scores.insert("Alice", 105); // 更新Alice的分?jǐn)?shù)scores.insert("Eve", 80); // 插入新的鍵值對(duì)
要獲取HashMap中的值,可以使用get方法,和 Java 是不是很類(lèi)似。如果鍵不存在,它會(huì)返回一個(gè)Option。
// let alice_score = scores.get("test"); // 鍵不存在,將會(huì)打印出 Nonelet alice_score = scores.get("Alice");match alice_score { Some(score) => println!("Alice's score is: {}", score), None => println!("Alice's score is not available."),}
還可以對(duì)HashMap中的鍵值對(duì)進(jìn)行刪除操作,可以使用remove方法。
scores.remove("Bob");
除上面增刪改操作,還有一個(gè)重要的,如果遍歷HashMap中的所有鍵值,這里使用迭代器。
use std::collections::HashMap;fn main() { let mut scores = HashMap::new(); scores.insert("Alice", 100); scores.insert("Bob", 90); scores.insert("Charlie", 95); scores.insert("Alice", 105); // 遍歷 for (key, value) in &scores { println!("{}: {}", key, value); }}
遍歷結(jié)果:
Charlie: 95Alice: 105Bob: 90[Done] exited with code=0 in 0.521 seconds
除了上面介紹的常見(jiàn)操作以外,其實(shí)HashMap還提供了許多有用的方法,比如查找鍵是否存在、獲取鍵的集合、獲取值的集合等等。這些方法在實(shí)際開(kāi)發(fā)中,可以根據(jù)需要靈活使用,非常方便。
首先,來(lái)看第一個(gè),默認(rèn)值,這個(gè)作用是如果鍵不存在,你可以使用entry方法來(lái)設(shè)置默認(rèn)值。
let charlie_score = scores.entry("Charlie").or_insert(0);
另外還可以使用entry方法來(lái)更新值,這就更加有意思了,可以讓你在在原有值的基礎(chǔ)上執(zhí)行操作,用起來(lái)也是挺爽是不是。
let bob_score = scores.entry("Bob").or_insert(0);*bob_score += 5;
最后一個(gè),如果需要按鍵或值對(duì)HashMap進(jìn)行排序,你可以將它們提取到Vec中,然后使用sort方法來(lái)排序。
let mut score_vec: Vec<(&str, &i32)> = scores.iter().collect();score_vec.sort_by(|a, b| b.1.cmp(a.1)); // 按值降序排序
然后現(xiàn)在score_vec向量包含了HashMap中的鍵值對(duì),然后使用sort_by方法來(lái)排序向量中的元素。其實(shí)就是通過(guò)一個(gè)閉包完成的,該閉包接受兩個(gè)參數(shù)a和b,它們分別代表向量中的兩個(gè)元素,每個(gè)元素都是一個(gè)包含鍵和值的元組。
元素比較使用cmp方法,它返回一個(gè)排序順序,對(duì)于整數(shù)的話(huà),它可以是Ordering::Less、Ordering::Equal或Ordering::Greater,分別表示“小于”、“等于”或“大于”這樣比較。
總結(jié), Rust 中的HashMap是一個(gè)強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和操作鍵值對(duì)。今天主要介紹常規(guī)用法、常見(jiàn)操作和一些技巧,希望對(duì)你有所幫助。
本文鏈接:http://www.tebozhan.com/showinfo-26-60985-0.htmlRust Map指南:深入理解、輕松應(yīng)用
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 使用Python、OpenCV和Pyzbar實(shí)時(shí)攝像頭識(shí)別二維碼!
下一篇: 圖片識(shí)別無(wú)須借助外包API,使用這兩個(gè)強(qiáng)大的Python庫(kù)也能實(shí)現(xiàn)