当前位置: 首页 > 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);}
}

http://www.mrgr.cn/news/91420.html

相关文章:

  • 2013年下半年软件设计师上午题考察知识点及其详细解释(附真题及答案解析)
  • Leetcode2080:区间内查询数字的频率
  • 文档检测校正的重要性
  • Mycat中间件
  • 【TI C2000】F28002x的系统延时、GPIO配置及SCI(UART)串口发送、接收
  • leetcode-495.提莫攻击
  • 【16届蓝桥杯寒假刷题营】第2期DAY1I
  • 视点坐标及鼠标交点坐标的信息显示(七)
  • 基于SpringBoot的“高考志愿智能推荐系统”的设计与实现(源码+数据库+文档+PPT)
  • 计算机视觉中图像的基础认知
  • Chrome多开终极形态解锁!「窗口管理工具+IP隔离插件
  • 计算机视觉:卷积神经网络(CNN)基本概念(一)
  • 【深度解析】图解Deepseek-V3模型架构-混合专家模型(MoE)
  • VMware Workstation 17.0 Pro创建虚拟机并安装Ubuntu22.04与ubuntu20.04(双版本同时存在)《包含小问题总结》
  • 【数据结构基础_链表】
  • mysql 学习16 视图,存储过程,存储函数,触发器
  • SQL复习
  • STM32创建静态库lib
  • javacv将mp4视频切分为m3u8视频并播放
  • docker 基础命令使用(ubuntu)