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

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();//…...

芸鹰蓬飞:抖音投流以后还有自然流量吗?

随着抖音平台的普及&#xff0c;企业和个人纷纷加入到这个短视频的热潮中。然而&#xff0c;一旦投入抖音投流&#xff0c;是否还能依赖自然流量&#xff1f;这是许多用户和品牌关心的问题。本文将深入剖析这一话题&#xff0c;探讨抖音投流与自然流量之间的关系。 一、抖音投…...

CTFhub-RCE-php://input

我们需要使用php://input来构造发送的指令 查看phpinfo&#xff0c;找到一下字段 证明是可以使用php://input 1. 使用Burpsuite抓包并转至Repeater 2. 构造包 方法&#xff1a;POST 目标&#xff1a;/?filephp://input Body&#xff1a;<?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丢失”。这个错误通常会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何修复呢&#xff1f;下面我将为大家介绍四个修复vcomp120.dll丢失的方法。 一、使用dll修复程序修复 可以通过百度或许…...

linux下使用Docker Compose部署Spug实现公网远程访问

&#x1f4d1;前言 本文主要是linux下使用Docker Compose部署Spug实现公网远程访问的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &am…...

【STM32 CAN】STM32G47x 单片机FDCAN作为普通CAN外设使用教程

STM32G47x 单片机FDCAN作为普通CAN外设使用教程 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;是一种用于实时应用的串行通讯协议总线&#xff0c;它可以使用双绞线来传输信号&#xff0c;是世界上应用最广泛的现场总线之一。CAN协议用于汽…...

Apache Log4j2漏洞

Log4j2是一个Java日志组件,被各类Java框架广泛地使用。它的前身是Log4j,Log4j2重新构建和设计了框架,可以认为两者是完全独立的两个日志组件。本次漏洞影响范围为Log4j2最早期的版本2.0-beta9到2.15.0。Log4j2分为2个jar包,一个是接口log4j-api-${版本号}.jar,一个是具体实…...

超级干货:光纤知识总结最全的文章

你们好&#xff0c;我的网工朋友。 光纤已经是远距离有线信号传输的主要手段&#xff0c;而安装、维护光纤也是很多人网络布线的基本功。 在网络布线中&#xff0c;通常室外楼宇间幢与幢之间使用的是光缆&#xff0c;室内楼宇内部大都使用的是以太网双绞线&#xff0c;也有使用…...

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示&#xff1a; The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败&#xff0c;close project 也关不掉&#xff0c;我都是用任务管理器杀死进程的…...

微服务拆分的一些基本原则

文章首发公众号&#xff1a;海天二路搬砖工 单一职责原则 什么是单一职责原则 单一职责原则原本是面向对象设计中的一个基本原则&#xff0c;它指的是一个类只负责一项职责&#xff0c;不要存在多于一个导致类变更的原因。 在微服务架构中&#xff0c;一个微服务也应该只负…...

Ubuntu取消sudo的输入密码

Ubuntu最近要安装软件&#xff0c;每次sudo都要输入一次密码&#xff0c;感觉很麻烦&#xff0c;于是想能不能设置为不输入密码&#xff0c;在网上找了一下解决办法。 主要参考这篇文章&#xff1a; Ubuntu取消sudo时输入密码 上面这篇文章使用的是vim&#xff0c;但是按照博…...

基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总

前言&#xff1a;基本上按照openstack官方网站动手可以搭建成功&#xff08;如有需要私信发部署文档&#xff09;。 但是任然有些小问题&#xff0c;所以汇总如下。 第一个问题 问题&#xff1a; ubuntu搭建2023.2版本neutorn报错&#xff0c;ERROR neutron.plugins.ml2.driv…...

如何入门学习黑客技术?如何选择编程语言?如何选择适合黑客的操作系统?

‘ 一 ’ 了解黑客技术的基础知识 学习黑客技术需要对网络安全和计算机系统有一定的了解。可以通过参加安全培训班、阅读专业书籍和学术论文、浏览网络安全博客和论坛等方式获取基础知识。涉及的内容包括网络协议、操作系统原理、计算机网络和编程等。 ‘ 二 ’ 选择适合你的…...

教育局档案室智慧档案库房建设方案

教育局档案室智慧档案库房建设是指教育局为了更好地保存和管理学校、教师、学生等相关档案资料&#xff0c;以及保证这些档案资料的安全性、可靠性和完整性&#xff0c;而建设的一个专门的存储、管理和保护档案资料的场所。 专久智能提供的教育局档案库房建设方案从以下几个方面…...

智慧城市数据中台建设方案:PPT全文51页,附下载

关键词&#xff1a;智慧城市解决方案&#xff0c;数据中台解决方案&#xff0c;智慧城市建设&#xff0c;数据中台技术架构&#xff0c;数据中台建设 一、智慧城市数据中台建设背景 智慧城市数据中台是在城市数字化转型和智能化升级的背景下提出的&#xff0c;旨在实现城市数…...

计算复杂性理论(一)图灵机

计算复杂性理论&#xff08;一&#xff09;图灵机 一台 k-带图灵机&#xff08;TM&#xff09;M 有 k-条带子。第一条带子称为输入带&#xff0c;用来存放输入数据&#xff0c;输入带是只读带。其余 k−1 条带子是工作带&#xff0c;既可以从工作带上读信息&#xff0c;也可以…...

VM虚拟机只有一个C盘怎么添加硬盘新分区盘符

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 VM虚拟机中安装Window 系统后&#x…...

堆排序(大根堆、小根堆)

参考视频&#xff1a; 1、数据结构&#xff0c;小根堆的调整&#xff01;必须熟练掌握&#xff01; 2、数据结构建堆筛选输出最小值 | 计算机软件考研期末知识点2...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…...

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…...