当前位置: 首页 > news >正文

Rust中的collections

collections

HashMap

概述: 用于存储键值对的数据结构,底层实现是哈希表,因此是无序的。使用开放寻址法处理冲突。

插入数据:

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert("Alice", 50);
    scores.insert("Bob", 60);
    scores.insert("Charlie", 70);

    println!("scores: {:?}", scores);
}

如果insert的key已经存在,那就会更新value

获取值:

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert("Alice", 50);
    scores.insert("Bob", 60);
    scores.insert("Charlie", 70);

    match scores.get("Bob") {
        Some(&score) => println!("Bob's score: {}", score),
        None => println!("Bob not found"),
    }
}

如果key存在,则返回对应的值的引用;否则返回None

检查key是否存在:

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert("Alice", 50);
    scores.insert("Bob", 60);
    scores.insert("Charlie", 70);

    if scores.contains_key("Alice") {
        println!("Alice is in the map");
    } else {
        println!("Alice is not in the map");
    }
}

移除元素:

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert("Alice", 50);
    scores.insert("Bob", 60);
    scores.insert("Charlie", 70);

    if let Some(score) = scores.remove("Alice") {
        println!("Removed Alice with score: {}", score);
    } else {
        println!("Alice not found");
    }

    println!("scores: {:?}", scores);
}

删除成功返回该键对应的值(Some(value)),否则返回None

遍历HashMap:

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert("Alice", 50);
    scores.insert("Bob", 60);
    scores.insert("Charlie", 70);

    for (key, value) in scores {
        println!("{}: {}", key, value);
    }
}

获取或插入值:

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    // 如果键不存在,插入一个默认值
    scores.entry("Alice").or_insert(50);
    println!("socres: {:?}", scores);

    // 如果键已经存在,修改它的值
    *scores.entry("Alice").or_insert(0) += 10;
    println!("scores: {:?}", scores);
}

在键不存在时插入默认值,或者获取某个键的值并进行修改

LinkedList

概述: 双向链表,在插入和删除元素时不会导致元素的移动(相对于Vec),从而提供了更好的性能,特别是对大规模数据结构

创建LinkedList:

use std::collections::LinkedList;

fn main() {
    // 正常创建
    let list: LinkedList<i32> = LinkedList::new();
    println!("{:?}", list);

    // 从现有的Vec创建
    let vec = vec![1, 2, 3, 4, 5];
    let list2 = vec.into_iter().collect::<LinkedList<i32>>();
    println!("{:?}", list2);
}

插入元素:

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();

    // 插入到list前面
    list.push_front(1);
    // 插入到list后面
    list.push_back(2);

    println!("{:?}", list);
}

删除元素:

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back(1);
    list.push_back(2);
    list.push_back(3);

    // 删除前面的元素
    let mut removed = list.pop_front();
    println!("Removed: {:?}", removed);

    // 删除后面的元素
    removed = list.pop_back();
    println!("Removed: {:?}", removed);

    println!("{:?}", list);
}

访问元素:

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back(1);
    list.push_back(2);
    list.push_back(3);

    // 通过迭代器遍历元素
    for value in &list {
        print!("{} ", value);
    }
    println!();

    // 获取头尾元素
    if let Some(front) = list.front() {
        println!("Front: {}", front);
    }
    if let Some(back) = list.back() {
        println!("Back: {}", back);
    }
}

相关文章:

  • DeepSeek在学术读写翻译中的独特优势
  • Spring容器扩展点
  • 无线网络数字孪生(Digital Twin for Wireless Networks)
  • Node.js中不支持require和import两种导入模块的混用
  • 进阶——第十六届蓝桥杯嵌入式熟练度练习(eeprom的读写)
  • 【Unity精品插件】NGUI:UI设计传奇工具
  • 动态规划 之 划分型DP
  • 【Java】泛型与集合篇(四)
  • 简易的仿桌面文件夹上传(vue2)
  • AI进展不止于基准:深度解析Grok 3的局限
  • 为AI聊天工具添加一个知识系统 之109 详细设计之50 三性三量三境
  • 数据分析--数据清洗
  • C++ 设计模式-外观模式
  • openharmony中HDF驱动框架关键流程说明-观察者模式
  • Redis7——基础篇(四)
  • 安卓鸿蒙应用开发架构变迁
  • HTML之JavaScript Form表单事件
  • [生活杂项][运动教程]自由泳
  • 【拥抱AI】GPT Researcher的诞生
  • qemu-kvm源码解析-cpu虚拟化
  • 云南多地突查公职人员违规饮酒:公安局门口开展酒精吹气测试
  • 拿出压箱底作品,北京交响乐团让上海观众享受音乐盛宴
  • 习近平同俄罗斯总统普京会谈
  • 视频丨习近平同普京会谈:共同弘扬正确二战史观,维护联合国权威和地位
  • 习近平同俄罗斯总统普京举行会谈
  • 国防部:正告菲方停止以任何方式冲撞中方核心利益