自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Rust Map指南:深入理解、輕松應(yīng)用

開發(fā)
本文我們一起探討 Rust 中map 的基本用法,和常見操作以及一些有用的技巧。

大家好,我是漁夫。

今天我們來聊聊 Rust 中的map知識,在其他語言一樣,Map 通常指的是一種數(shù)據(jù)結(jié)構(gòu)和一系列操作,用于將一組值映射到另一組值或執(zhí)行某些操作,也就是我們常說的鍵值對。接下來一起探討 Rust 中map 的基本用法,和常見操作以及一些有用的技巧。

什么是map?

在 Rust 中map是一種非常重要數(shù)據(jù)結(jié)構(gòu),和其他語言類似,也是一種鍵-值存儲的集合。它能夠允許你將一個鍵與一個值相關(guān)聯(lián),然后就方便通過鍵來檢索值。下面是簡單例子,在 Rust中,map通常通過std::collections::HashMap來實(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)建了一個名為scores的HashMap,并且將三個鍵值對插入其中。使用get方法來檢索 "Alice" 的分?jǐn)?shù)。

  • 其中 match alice_score { ... } ,作用是它用于匹配alice_score的值,并根據(jù)匹配結(jié)果執(zhí)行不同的代碼塊。
  • Some(score) => println!("Alice's score is: {}", score):這是一個匹配分支。它檢查alice_score是否包含Some值。
  • None => println!("Alice's score is not available."):這是另一個匹配分支,用于處理alice_score為None的情況。

在 Rust 語言還是挺好用的這些匹配規(guī)則。

基本操作

1.插入和更新值

如果你要向HashMap中插入新的鍵值對,可以使用insert方法。如果鍵已經(jīng)存在,它將把值覆蓋掉。

scores.insert("Alice", 105);  // 更新Alice的分?jǐn)?shù)
scores.insert("Eve", 80);      // 插入新的鍵值對

2.獲取值

要獲取HashMap中的值,可以使用get方法,和 Java 是不是很類似。如果鍵不存在,它會返回一個Option。

// let alice_score = scores.get("test"); // 鍵不存在,將會打印出 None
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."),
}

3.刪除值

還可以對HashMap中的鍵值對進(jìn)行刪除操作,可以使用remove方法。

scores.remove("Bob");

4.遍歷

除上面增刪改操作,還有一個重要的,如果遍歷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: 95
Alice: 105
Bob: 90

[Done] exited with code=0 in 0.521 seconds

除了上面介紹的常見操作以外,其實(shí)HashMap還提供了許多有用的方法,比如查找鍵是否存在、獲取鍵的集合、獲取值的集合等等。這些方法在實(shí)際開發(fā)中,可以根據(jù)需要靈活使用,非常方便。

5.默認(rèn)值

首先,來看第一個,默認(rèn)值,這個作用是如果鍵不存在,你可以使用entry方法來設(shè)置默認(rèn)值。

let charlie_score = scores.entry("Charlie").or_insert(0);

6.更新值

另外還可以使用entry方法來更新值,這就更加有意思了,可以讓你在在原有值的基礎(chǔ)上執(zhí)行操作,用起來也是挺爽是不是。

let bob_score = scores.entry("Bob").or_insert(0);
*bob_score += 5;

7.排序

最后一個,如果需要按鍵或值對HashMap進(jìn)行排序,你可以將它們提取到Vec中,然后使用sort方法來排序。

let mut score_vec: Vec<(&str, &i32)> = scores.iter().collect();
score_vec.sort_by(|a, b| b.1.cmp(a.1));  // 按值降序排序
  • scores.iter() 是使用HashMap的iter方法,返回一個迭代器,該迭代器可以用于遍歷HashMap中的鍵值對。
  • collect方法,作用是將迭代器中的元素收集到一個容器中,這里是將鍵值對收集到了score_vec向量中。

然后現(xiàn)在score_vec向量包含了HashMap中的鍵值對,然后使用sort_by方法來排序向量中的元素。其實(shí)就是通過一個閉包完成的,該閉包接受兩個參數(shù)a和b,它們分別代表向量中的兩個元素,每個元素都是一個包含鍵和值的元組。

元素比較使用cmp方法,它返回一個排序順序,對于整數(shù)的話,它可以是Ordering::Less、Ordering::Equal或Ordering::Greater,分別表示“小于”、“等于”或“大于”這樣比較。

最后

總結(jié), Rust 中的HashMap是一個強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),用于存儲和操作鍵值對。今天主要介紹常規(guī)用法、常見操作和一些技巧,希望對你有所幫助。

責(zé)任編輯:趙寧寧 來源: 碼農(nóng)漁夫
相關(guān)推薦

2024-06-06 09:58:13

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過濾器

2024-01-09 08:28:44

應(yīng)用多線程技術(shù)

2010-07-26 11:27:58

Perl閉包

2013-09-22 14:57:19

AtWood

2009-09-25 09:14:35

Hibernate日志

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2020-09-23 10:00:26

Redis數(shù)據(jù)庫命令

2017-01-10 08:48:21

2017-08-15 13:05:58

Serverless架構(gòu)開發(fā)運(yùn)維

2019-06-25 10:32:19

UDP編程通信

2024-02-21 21:14:20

編程語言開發(fā)Golang

2024-04-07 00:04:00

Go語言Map

2022-02-14 07:47:26

overlayfsdockerrootfs

2025-03-06 12:44:45

2025-03-07 11:26:52

2022-11-04 09:43:05

Java線程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號