【05】RUST常用的集合函数宏类型

文章目录

  • 常用集合
    • Vec
    • String
    • HashMap
    • 打印
  • 类型
    • `Option<T>`

常用集合

Vec

  • 堆上连续内存
  • vector可能出现扩容,把老元素copy到内存新位置
    • 因此不允许let first = &v[0];作用域内调用v.push(4);
// 定义
let v: Vec<i32> = Vec::new();
let v = vec![1, 2, 3];	// 使用vec!宏定义// 增加元素
v.push(4);// 取数值
v[2]; // 下标索引
v.get(2); // 调用get// 越界时不会panic,会返回None
v.get(100);
v[100];// 遍历
for i in &v{// 不可变遍历元素println!("{i}");
}
for i in &mut v{// 可变遍历元素*i += 50;
}
// 融合枚举可以往vec中填充多种数据类型
enum SpreadsheetCell {Int(i32),Float(f64),Text(String),
}let row = vec![SpreadsheetCell::Init(3),SpreadsheetCell::Text("x_x"),SpreadsheetCell::Float(3.1415926),];

String

String字符串字面值str
let s = String:::new();let s = String::from("string");let s = "string".to_string();“string”let s1: &str = "hello";let s2 = String::from("world"); let s2_slice: &str = &s2;
堆分配的、可变的 UTF-8 字符串。本质是对 Vec 的封装,但保证内容为合法 UTF-8。用双引号 “…” 表示的硬编码字符串。对一段 UTF-8 字节序列的引用,通常以 &str 形式出现。

RUST中使用UTF-8编码,字符长度可变。

let mut  s = String::new();
let data = "initial contents";
let s = data.to_string(); // .to_string();用于任何实现了 Display trait 的类型
let s = "initial contents".to_string();
let mut s = String::from("foo");
s.push_str("bar");// push_str不获取所有权,为获取一个单独的字符作为参数,并附加到 String 中。
let mut s1 = String::from("foo");
let s2 = "bar";
s1.push_str(s2);
println!("s2 is {s2}");//s2依旧有效// + 获取了s1所有权fn add(self, s: &str) -> String {} 
let s1 = String::from("Hello, ");
let s2 = String::from("world!");
let s3 = s1 + &s2; //这里&s2发生强制类型转换为&str
// 注意 s1 被移动了,不能继续使用//更为复杂的字符串链接,可以使用 format! 宏拼接
let s1 = String::from("tic");
let s2 = String::from("tac");
let s3 = String::from("toe");
let s = format!("{s1}-{s2}-{s3}");// 索引字符串,不建议,UTF-8编码长度不固定,需要程序员确保正确// 遍历字符串
// 按照字符遍历 2 字符
for c in "Зд".chars() {println!("{c}");
}
// 按照字节遍历 4 字节
for b in "Зд".bytes() {println!("{b}");
}

HashMap

默认使用SipHash进行,可以抵御涉及哈希表(hash table)的拒绝服务(Denial of Service, DoS)攻击。

use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);// 根据key查询数值
let team_name = String::from("Blue");
let score = scores.get(&team_name).copied().unwrap_or(0);
// get返回Option<&V>
// 调用 copied 方法来获取一个Option<i32>,没有key时会返回 None
// 调用 unwrap_or 在 scores 中没有该键所对应的项时将其设置为零// 遍历数据
for (key, value) in &scores {println!("{key}: {value}");
}// 插入后所有权归HashMap所有
use std::collections::HashMap;
let field_name = String::from("Favorite color");
let field_value = String::from("Blue");
let mut map = HashMap::new();
map.insert(field_name, field_value);
// 这里 field_name 和 field_value 不再有// 多次插入,会新的覆盖老的。
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Blue"), 25);//Entry 的 or_insert 方法在键对应的值存在时就返回这个值的可变引用,如果不存在则将参数作为新值插入并返回新值的可变引用。
// entry只有在没有key的时候才进行插入
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.entry(String::from("Yellow")).or_insert(50);
scores.entry(String::from("Blue")).or_insert(50);
// 根据key已有的value更新
let mut map = HashMap::new();
for word in text.split_whitespace() {let count = map.entry(word).or_insert(0);*count += 1;
}

打印

  • dbg!()
    • 格式打印,()获取参数所有权,并返回表达式所有权。
    • 打印到标准错误控制台流stderr
  • println!()
    • ()接受引用
    • 打印到标准输出控制台流stdout

类型

Option<T>

  • 用于空值检查 (因为编译器会保证T类似一定非空值)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity-Mirror网络框架-从入门到精通之MultipleMatches示例

文章目录 前言MultipleMatchesLobbyViewRoomViewMatchGUIPlayerGUI总结前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开源网络框架,专为多人…

VMware Workstation创建虚拟机

目录 创建新的虚拟机 虚拟机快照功能 虚拟机添加空间 其他注意事项 创建新的虚拟机 打开VMware Workstation&#xff1a;启动软件后&#xff0c;点击“创建新的虚拟机”。 选择安装方式&#xff1a; 典型安装&#xff1a;适合大多数用户&#xff0c;会自动完成大部分配置…

DeepSeek AI R1推理大模型API集成文档

DeepSeek AI R1推理大模型API集成文档 引言 随着自然语言处理技术的飞速发展&#xff0c;大语言模型在各行各业的应用日益广泛。DeepSeek R1作为一款高性能、开源的大语言模型&#xff0c;凭借其强大的文本生成能力、高效的推理性能和灵活的接口设计&#xff0c;吸引了大量开发…

活泼瘤胃球菌(Ruminococcus gnavus)——多种疾病风险的潜在标志物

​ 前几日&#xff0c;南方医科大学深圳医院院长周宏伟教授团队在国际顶尖医学期刊《Nature Medicine》上发表了一项重要研究。首次揭示一种名为活泼瘤胃球菌(Ruminococcus gnavus)的细菌产生的物质——苯乙胺&#xff0c;在肝性脑病发生中的关键作用。 ​ 同时谷禾的人群检测数…

8.flask+websocket

http是短连接&#xff0c;无状态的。 websocket是长连接&#xff0c;有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…

qiime2:安装与使用

试一下docker安装 docker pull quay.io/qiime2/amplicon:2024.10 docker images docker run -v {挂载的目录}:/data quay.io/qiime2/amplicon:2024.10 qiime -h使用 import.txt docker run -v ~/diarrhoea/MJ/qingzhu:/data quay.io/qiime2/amplicon:2024.10 qiime tools imp…

技术实战|ELF 2学习板本地部署DeepSeek-R1大模型的完整指南(一)

DeepSeek作为国产AI大数据模型的代表&#xff0c;凭借其卓越的推理能力和高效的文本生成技术&#xff0c;在全球人工智能领域引发广泛关注。DeepSeek-R1作为该系列最新迭代版本&#xff0c;实现了长文本处理效能跃迁、多模态扩展规划、嵌入式适配等技术维度的突破。 RK3588作为…

DeepSeek本地部署_桌面版AnythingLLM本地知识库搭建

一.DeepSeek本地部署 1.下载并安装&#xff1a;ollama Download Ollama on macOSDownload Ollama for macOShttps://ollama.com/download 安装是否成功确认&#xff0c;管理员权限运行PowerShell&#xff1a; ollama -h 2.下载安装DeepSeek 管理员方式运行PowerShell&#…

BGP基础协议详解

BGP基础协议详解 一、BGP在企业中的应用二、BGP概述2.1 BGP的特点2.2 基本配置演示2.3 抓包观察2.4 BGP的特征三、BGP对等体关系四、bgp报文4.1 BGP五种报文类型(重点)4.2 BGP报文格式-报文头格式4.3 Open报文格式4.4 Update报文格式4.5 Notification报文格式4.6 Route-refre…

2025.2.10 每日学习记录3:技术报告只差相关工作+补实验

0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右&#xff0c;一次性备考笔试的三个科目 1.实习申请技术准备&#xff1a;微调、Agent、RAG 据央视财经&#xff0c;数据显示&#xff0c;截至2024年12月…

算法 ST表

目录 前言 一&#xff0c;暴力法 二&#xff0c;打表法 三&#xff0c;ST表 四&#xff0c;ST表的代码实现 总结 前言 ST表的主要作用是在一个区间里面寻找最大值&#xff0c;具有快速查找的功能&#xff0c;此表有些难&#xff0c;读者可以借助我的文章和网上的课程结…

25考研材料复试面试常见核心问题真题汇总,材料考研复试面试有哪些经典问题?材料考研复试过程最看重什么内容?

材料复试面试难&#xff01;千万不要死磕&#xff01;复试是有技巧的&#xff01; 是不是刷了三天三夜经验贴&#xff0c;还是不知道材料复试会问啥&#xff1f;去年我复试时被导师连环追问"非晶合金的原子扩散机制"&#xff0c;差点当场宕机...今天学姐掏心窝总结&…

Docker Compose介绍及安装使用MongoDB数据库详解

在现代容器化应用部署中&#xff0c;Docker Compose是一种非常实用的工具&#xff0c;它允许我们通过一个docker-compose.yml文件来定义和运行多容器应用程序。然而&#xff0c;除了Docker之外&#xff0c;Podman也提供了类似的工具——Podman Compose&#xff0c;它允许我们在…

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入&#xff1a;aspnetcore.json和aspnetcore-endpoint.json 效果&#xff1a;

团结引擎“虚拟阴影贴图”能力解析

在团结引擎 1.4.0 版本中&#xff0c;我们发布了重磅功能&#xff1a;虚拟阴影贴图&#xff08;Virtual Shadow Maps&#xff0c;VSM&#xff09;&#xff0c;全面升级开发体验&#xff0c;为开发者提供更加逼真的光影效果。 虚拟阴影贴图介绍 虚拟阴影贴图&#xff08;Virtua…

docker.service job docker.service/start failed with result ‘dependency‘

Bug:docker.service job docker.service/start failed with result ‘dependency’ 运行以下命令&#xff1a; sudo systemctl start docker.service出现错误&#xff1a; docker.service job docker.service/start failed with result dependency解决办法&#xff1a; 给系…

docker 逃逸突破边界

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动&#xff0c;包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

SaaS+AI应用架构:业务场景、智能体、大模型、知识库、传统工具系统

SaaSAI应用架构&#xff1a;业务场景、智能体、大模型、知识库、传统工具系统 大家好&#xff0c;我是汤师爷~ 在SaaS与AI应用的演进过程中&#xff0c;合理的架构设计至关重要。本节将详细介绍其五个核心层次&#xff1a; 业务场景层&#xff1a;发现和确定业务场景智能体层…

使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序

安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…

运放放大器

1 运放是什么 1.1 运算放大器&#xff0c;常用于做信号处理。如:信号放大、滤波、积分、微分、整流、甚至可以用来做电路主控等等。其功能非常强大 1.2 运放的重要特性 虚短 &#xff08;前提是要有负反馈&#xff09; 1.2.1 虚短的概念是指运放在正常工作过程中&#xff0c…