Rust4.2 Common Collections
Rust学习笔记
Rust编程语言入门教程课程笔记
参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community)
Lecture 8: Common Collections
fn main() {//Vectorlet mut v: Vec<i32> = Vec::new();//new empty vectorv.push(1);let v2 = &v[0];//immutable borrow//v.push(2);//mutable borrow//cannot borrow `v` as mutable because it is also borrowed as immutable//because v.push will cause the vector to reallocate and invalidate the reference//so v2 may be pointing to deallocated memoryprintln!("The first element is: {}", v2);let mut u = vec![1, 2, 3];//new vector with valuesprintln!("u[0] = {:?}", u[0]);//access element with indexprintln!("u[1] = {:?}", u.get(1));//access element with get()match u.get(1) {Some(second) => println!("The second element is {}", second),None => println!("There is no second element."),}u.insert(0, 0);//insert element at indexfor i in &u {//immutable borrowprintln!("{}", i);}for i in &mut u {//mutable borrow*i += 50; //dereference i and add 50 to it}//using enum to store multiple types in a vectorenum SpreadsheetCell {Int(i32),Float(f64),Text(String),}let row = vec![SpreadsheetCell::Int(3),SpreadsheetCell::Float(10.12),SpreadsheetCell::Text(String::from("blue")),];for i in &row {//for + matchmatch i {SpreadsheetCell::Int(i) => println!("Int: {}", i),SpreadsheetCell::Float(f) => println!("Float: {}", f),SpreadsheetCell::Text(s) => println!("Text: {}", s),}}//Stringlet mut s = String::new();//new empty stringprintln!("{}", s);let data = "initial contents 0";//new string from string literals = data.to_string();//new string from string literalprintln!("{}", s);s = "initial contents 1".to_string();//new string from string literalprintln!("{}", s);s = String::from("initial contents 2");//new string from string literalprintln!("{}", s);s.push_str("bar");//append string literalprintln!("{}", s);s.push('l');//append charprintln!("{}", s);//concatenationlet s1 = String::from("Hello, ");let s2 = String::from("world!");let s3 = s1 + &s2;//s1 has been moved here and can no longer be usedprintln!("{}", s3);//format! macrolet s1 = String::from("tic");let s2 = String::from("tac");let s3 = String::from("toe");let s4 = format!("{}-{}-{}", s1, s2, s3);//s1, s2, s3 not movedprintln!("{}", s1);println!("{}", s2);println!("{}", s3);println!("{}", s4);//indexinglet s1 = String::from("hello");//let h = s1[0];//cannot index into a Stringlet h = &s1[0..1];//indexing with rangeprintln!("{}", h);//lengthlet len = String::from("Hola").len();//length in bytesprintln!("{}", len);let len = String::from("Здравствуйте").len();//length in bytesprintln!("{}", len);let len = String::from("Здравствуйте").chars().count();//length in charsprintln!("{}", len);//iterationfor c in "नमस्ते".chars() {println!("{}", c);}for b in "नमस्ते".bytes() {println!("{}", b);}//Hash Map//HashMap<K, V> stores a mapping of keys of type K to values of type Vuse std::collections::HashMap;//hashmap is not in the preludelet mut scores = HashMap::new();//new empty HashMapscores.insert(String::from("Blue"), 10);//insert key-value pairscores.insert(String::from("Yellow"), 50);//insert key-value pairprintln!("{:?}", scores);//collecting into a hashmaplet teams = vec![String::from("Blue"), String::from("Yellow")];//new vectorlet initial_scores = vec![10, 50];//new vectorlet scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect();//collect into hashmap//HashMap<_,_> type annotation is needed because collect can collect into many different data structures//zip() creates a vector of tuplesprintln!("{:?}", scores);//ownershiplet field_name = String::from("Favorite color");let field_value = String::from("Blue");let mut map = HashMap::new();//new empty hashmap//map.insert(field_name, field_value);//field_name and field_value are moved into map//println!("{}", field_name);//field_name and field_value are moved into mapmap.insert(&field_name, &field_value);//field_name and field_value are borrowedprintln!("{}", field_name);//field_name and field_value are borrowed//accessing values in a hashmaplet team_name = String::from("Blue");let score = scores.get(&team_name);//get() returns an Option<&V>match score {Some(s) => println!("{}", s),None => println!("No score"),}//iterating over a hashmapfor (key, value) in &scores {println!("{}: {}", key, value);}//updating a hashmap//overwriting a valuelet mut scores = HashMap::new();//new empty hashmapscores.insert(String::from("Blue"), 10);//insert key-value pairscores.insert(String::from("Blue"), 25);//overwrite valueprintln!("{:?}", scores);//only inserting a value if the key has no valuescores.entry(String::from("Yellow"));//insert key-value pair if key has no valuescores.entry(String::from("Yellow")).or_insert(50);//insert key-value pair if key has no valuescores.entry(String::from("Blue")).or_insert(50);//do not insert key-value pair if key has valueprintln!("{:?}", scores);//updating a value based on the old valuelet text = "hello world wonderful world";let mut map = HashMap::new();//new empty hashmapfor word in text.split_whitespace() {//split string into wordslet count = map.entry(word).or_insert(0);//insert key-value pair if key has no value*count += 1;//dereference count and increment it}println!("{:?}", map);}
相关文章:
Rust4.2 Common Collections
Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 8: Common Collections fn main() {//Vectorlet mut v: Vec<i32> Vec::new();//…...
芸鹰蓬飞:抖音投流以后还有自然流量吗?
随着抖音平台的普及,企业和个人纷纷加入到这个短视频的热潮中。然而,一旦投入抖音投流,是否还能依赖自然流量?这是许多用户和品牌关心的问题。本文将深入剖析这一话题,探讨抖音投流与自然流量之间的关系。 一、抖音投…...
CTFhub-RCE-php://input
我们需要使用php://input来构造发送的指令 查看phpinfo,找到一下字段 证明是可以使用php://input 1. 使用Burpsuite抓包并转至Repeater 2. 构造包 方法:POST 目标:/?filephp://input Body:<?php system("ls /"…...
RISC-V处理器设计(五)—— 在 RISC-V 处理器上运行 C 程序
目录 一、前言 二、从 C 程序到机器指令 三、实验 3.1 实验环境 3.11 Windows 平台下环境搭建 3.12 Ubuntu 平台下环境搭建 3.13 实验涉及到的代码或目录 3.2 各文件作用介绍 3.2.1 link.lds 3.2.2 start.S 3.2.3 lib 和 include 目录 3.2.4 common.mk 3.2.5 demo …...
【PIE-Engine 数据资源】全球250米LAI产品
文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球250米LAI产品时间范围2015年空间范围全球数据来源北京师范大学肖志强教授团队代码片段var images pie.ImageCollection(“BNU/LAI/GLOBAL-250”) 二、描述 全球 250 米叶面指数产品由北京师范…...
vcomp120.dll丢失怎么办?vcomp120.dll丢失的解决方法分享
vcomp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行,给用户带来困扰。那么,当我们遇到这个问题时,应该如何修复呢?下面我将为大家介绍四个修复vcomp120.dll丢失的方法。 一、使用dll修复程序修复 可以通过百度或许…...
linux下使用Docker Compose部署Spug实现公网远程访问
📑前言 本文主要是linux下使用Docker Compose部署Spug实现公网远程访问的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &am…...
【STM32 CAN】STM32G47x 单片机FDCAN作为普通CAN外设使用教程
STM32G47x 单片机FDCAN作为普通CAN外设使用教程 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽…...
Apache Log4j2漏洞
Log4j2是一个Java日志组件,被各类Java框架广泛地使用。它的前身是Log4j,Log4j2重新构建和设计了框架,可以认为两者是完全独立的两个日志组件。本次漏洞影响范围为Log4j2最早期的版本2.0-beta9到2.15.0。Log4j2分为2个jar包,一个是接口log4j-api-${版本号}.jar,一个是具体实…...
超级干货:光纤知识总结最全的文章
你们好,我的网工朋友。 光纤已经是远距离有线信号传输的主要手段,而安装、维护光纤也是很多人网络布线的基本功。 在网络布线中,通常室外楼宇间幢与幢之间使用的是光缆,室内楼宇内部大都使用的是以太网双绞线,也有使用…...
PyCharm因安装了illuminated Cloud插件导致加载项目失败
打开Pycharm时会有弹窗提示: The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败,close project 也关不掉,我都是用任务管理器杀死进程的…...
微服务拆分的一些基本原则
文章首发公众号:海天二路搬砖工 单一职责原则 什么是单一职责原则 单一职责原则原本是面向对象设计中的一个基本原则,它指的是一个类只负责一项职责,不要存在多于一个导致类变更的原因。 在微服务架构中,一个微服务也应该只负…...
Ubuntu取消sudo的输入密码
Ubuntu最近要安装软件,每次sudo都要输入一次密码,感觉很麻烦,于是想能不能设置为不输入密码,在网上找了一下解决办法。 主要参考这篇文章: Ubuntu取消sudo时输入密码 上面这篇文章使用的是vim,但是按照博…...
基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总
前言:基本上按照openstack官方网站动手可以搭建成功(如有需要私信发部署文档)。 但是任然有些小问题,所以汇总如下。 第一个问题 问题: ubuntu搭建2023.2版本neutorn报错,ERROR neutron.plugins.ml2.driv…...
如何入门学习黑客技术?如何选择编程语言?如何选择适合黑客的操作系统?
‘ 一 ’ 了解黑客技术的基础知识 学习黑客技术需要对网络安全和计算机系统有一定的了解。可以通过参加安全培训班、阅读专业书籍和学术论文、浏览网络安全博客和论坛等方式获取基础知识。涉及的内容包括网络协议、操作系统原理、计算机网络和编程等。 ‘ 二 ’ 选择适合你的…...
教育局档案室智慧档案库房建设方案
教育局档案室智慧档案库房建设是指教育局为了更好地保存和管理学校、教师、学生等相关档案资料,以及保证这些档案资料的安全性、可靠性和完整性,而建设的一个专门的存储、管理和保护档案资料的场所。 专久智能提供的教育局档案库房建设方案从以下几个方面…...
智慧城市数据中台建设方案:PPT全文51页,附下载
关键词:智慧城市解决方案,数据中台解决方案,智慧城市建设,数据中台技术架构,数据中台建设 一、智慧城市数据中台建设背景 智慧城市数据中台是在城市数字化转型和智能化升级的背景下提出的,旨在实现城市数…...
计算复杂性理论(一)图灵机
计算复杂性理论(一)图灵机 一台 k-带图灵机(TM)M 有 k-条带子。第一条带子称为输入带,用来存放输入数据,输入带是只读带。其余 k−1 条带子是工作带,既可以从工作带上读信息,也可以…...
VM虚拟机只有一个C盘怎么添加硬盘新分区盘符
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 前言 VM虚拟机中安装Window 系统后&#x…...
堆排序(大根堆、小根堆)
参考视频: 1、数据结构,小根堆的调整!必须熟练掌握! 2、数据结构建堆筛选输出最小值 | 计算机软件考研期末知识点2...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
代理服务器-LVS的3种模式与调度算法
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:…...
