上海部道网站 建设快照不更新怎么办

web/2025/10/4 10:03:16/文章来源:
上海部道网站 建设,快照不更新怎么办,外贸通网站建设,怎么做手机app软件在Rust语言中包含了一系列被称为集合的数据结构。大部分的数据结构都代表着某个特定的值#xff0c;但集合却可以包含多个值。与内置的数组与元组类型不同#xff0c;这些集合将自己持有的数据存储在了堆上。这意味着数据的大小不需要在编译时确定#xff0c;并且可以随着程…在Rust语言中包含了一系列被称为集合的数据结构。大部分的数据结构都代表着某个特定的值但集合却可以包含多个值。与内置的数组与元组类型不同这些集合将自己持有的数据存储在了堆上。这意味着数据的大小不需要在编译时确定并且可以随着程序的运行按需扩大或缩小数据占用的空间。 被广泛使用的3个Rust集合 动态数组可以连续地存储任意多个值字符串字符的集合哈希映射可以将值关联到一个特定的键上是映射的特殊实现。 1、使用动态数组存储多个值 动态数组Vec(T)允许在单个数据结构中存储多个相同类型的值这些值会彼此相邻地排布在内存中。 (1)、创建动态数组 创建一个空的动态数组可以调用函数Vec::new。 示例 let v:Veci32 Vec::new();因为这是个空的动态数组里面没有任何的值所以Rust无法自动推导元素类型就需要显式地增加一个类型标记。 在标准库中的VecT是可以存储任意类型数据的在实际的动态数组创建时只要向数组内插入了数据Rust便可以自行推导出想要存储的数据。Rust还提供了一个简化代码的宏vec!这个宏可以根据提供的数值来创建一个新的动态数组。 示例 let v vec![1,2,3];这里创建了含有初始值123的动态数组Rust根据初始值推断出想要存储的数据类型为i32。 (2)、更新动态数组 在创建好的动态数组中添加元素需要使用push。示例 let mut v Vec::new();v.push(5); v.push(6); v.push(19);(3)、销毁动态数组时也会销毁其中的元素 动态数组一旦离开作用域就会被立即销毁。示例 {let v vec![1,2,3];//执行其他操作 }//V在这里离开作用域并随之被销毁动态数组中的所有内容会随着动态数组的销毁而销毁其持有的整数将被自动清理干净。 (4)、读取动态数组中的元素 访问动态数组中的数据可以通过索引或者get方法。示例 let v vec![1,2,3,4,5]; let third: i32 v[2]; println!(The third element is {},third}; match v.get(2){Some(third) println!(The third element is {},third},NONE println!(There is no third element), }注意当使用索引值2获取数值时获取的是第三个值动态数组使用数字进行索引索引值从零开始使用[]会直接返回元素的引用而接收索引作为参数的get方法返回的则是一个OptionT。 同理当越界访问元素时直接使用[]会导致程序触发panic而使用get方法时则会简单地返回None。 当一个变量持有了一个指向动态数组中首个元素的不可变引用那么当向这个动态数组结尾添加元素时会出现错误。示例 let mut v vec![1,2,3,4,5,6]; let first v[0]; v.push(7); println!(The first element is:{},first);这个错误是由动态数组的工作原理导致的动态数组中的元素是连续存储的插入新的元素后也许会没有足够的空间将所有的元素依次相邻地放下这就需要分配一个新的内存空间并将旧的元素移动到新的空间上去。但是当存在一个不可变引用就会导致第一个元素的引用会因为插入新元素而指向被释放的内存上。 (5)、遍历动态数组中的值 当需要依次访问动态数组的每一个元素的时候可以直接遍历其所有的元素而不需要使用索引一个一个地访问。示例 let v vec![1,2,3,4,5,6]; for i in v{println!({},i); }同样也可以遍历可变的动态数组获得元素的可变引用并修改其中的值。示例 let mut v vec![1,2,3,4]; for i in mut v{*i 50; }为了使用运算符来修改可变引用指向的值需要使用解引用运算符*来获得i绑定的值。 (6)、使用枚举来存储多个类型的值 为了在动态数组中存储不同类型的元素可以定义并使用枚举类型因为枚举中的所有变体都被定义为了同一种枚举类型。示例 enum SpreadsheetCell {Int(i32),Float(f64),Text(String), } let row vec![SpreadsheetCell::Int(3),SpreadsheetCell::Text(String::from(blue)),SpreadsheetCell::Float(10.12), ];为了计算出元素在堆上使用的存储空间Rust需要在编译时确定动态数组的类型。使用枚举的另一个好处在于它可以显式地列举出所有可以被放入动态数组的值类型。假如Rust允许动态数组存储任意类型那么在对动态数组中的元素进行操作时就有可能会因为一个或多个不当的类型处理而导致错误。将枚举和match表达式搭配使用意味着Rust可以在编译时确保所有可能的情形都得到妥当的处理。如果没有办法在编写程序时穷尽所有可能出现在动态数组中的值类型那么就无法使用枚举。 2、使用字符串存储UTF-8编码的文本 (1)、创建一个新的字符串 可以使用new函数来创建一个新的字符串。示例 let mut s String::new();这里创建了一个新的空字符串之后可以将数据填入其中。 对含有初始数据的情况在实现了Display trait的类型调用to_string方法去创建。示例 let data initial contents; let s data.to_string(); //或者 let s initial contents.to_string();同样也可以使用函数String::from来基于字符串字面量生成String。示例 let s String::from(initial contents);(2)、更新字符串 String的大小可以增减其中的内容也可以修改。正如将数据推入其中时Vec内部数据所发生的变化一样。此外我们还可以方便地使用运算符或format! 宏来拼接String。 i、使用push_str或push向字符串中添加内容 push_str只需要接收一个字符串切片作为参数并不需要获得参数的所有权。示例 let mut s1 String::from(foo); let s2 bar; s1.push_str(s2); println!(s2 is {}, s2);在执行完依旧可以打印s2的值。 push方法接收单个字符作为参数并将它添加到String中。示例 let mut s String::from(lo); s.push(l);ii、使用运算符或format! 宏来拼接字符串 如果需要将两个已经存在的字符串组合在一起可以使用运算符。示例 let s1 String::from(Hello, ); let s2 String::from(world!); let s3 s1 s2; // 注意这里的s1已经被移动且再也不能被使用了s2仅被引用这段程序看起来是将s1和s2两个字符串复制后创建一个新的字符串实际上是获取了S1的所有权再将S2复制进去最后将S1的所有权作为结果返回。 如果需要拼接多个字符串可以使用format!宏来实现。示例 let s1 String::from(tic); let s2 String::from(tac); let s3 String::from(toe); let s format!({}-{}-{},s1,s2,s3);format!宏会将结果包含在一个String中返回并且不会夺取任何参数的所有权。 (3)、字符串索引 在Rust中字符串并不能向其他的编程语言那样通过索引去访问。 因为在Rust中字符串是以UTF-8的形式存储的每个字符都是由不定长的字节组成所以通过常规的索引无法访问。 (4)、字符串切片 如果需要一个字符串切片则要在索引的[]中填写范围来指定所需要的字节内容而不是在[]中填写一个单个数字。示例 let hello 3ΠpaB; let s hello[0..4];这段程序中s是一个包含了字符串前4个字节的str如果每个字符都占据了两个字节那么s中的内容就是3Π如果使用hello[0…1]那么程序就会报错。 3、在哈希映射中存储键值对 哈希映射HashMapK,V存储了从K类型键到V类型值之间的映射关系。 (1)、创建一个新的哈希映射 可以使用new来创建一个空的哈希映射并通过insert方法来添加元素。示例 use std::collections::HashMap; let mut scores HashMap::new(); scores.insert(String::from(Blue),10); scores.insert(String::from(Yellow),50);这里的HashMap拥有类型为String的键以及类型为i32的值。和动态数组一样哈希映射也是同质的它要求所有的键必须拥有相同的类型所有的值也必须拥有相同的类型。 另一种构建哈希映射的方法是在一个由键值对组成的元组动态数组上使用collect方法。示例 use std::collections::HashMap; let teams vec![String::from(Blue),String::from(Yellow)]; let initial_scores vec![10,50]; let scores: HashMap_,_ teams.iter().zip(initial_scores.iter()).collect();这里的类型标记HashMap_,_不能省略因为collect可以作用于许多不同的数据类型如果不指明类型的话Rust就无法知道想要的具体类型。 (2)、哈希映射与所有权 对于实现了Copy trait的类型例如i32它们的值会被简单地复制到哈希映射中而对于String这种持有所有权的值其值将会转移且所有权会被转移给哈希映射。示例 use std::collections::HashMap; let field_name String::from(Favorite color); let field_value String::from(Blue);let mut map HashMap::new(); map.insert(filed_name,filed_value); //filed_name和filed_value在这里开始失效如果是将值的引用插入到哈希映射中那么这些值是不会被移动到哈希映射中这些引用所指向的值必须要保证在哈希映射有效时自己也是有效的。 (3)、访问哈希映射中的值 可以通过将键传入到get方法来获取哈希映射中的值。示例 use std::collections::HashMap; let mut scores HashMap::new(); scores.insert(String::from(Blue),10); scores.insert(String::from(Yellow),50);let team_name String::from(Blue); let score scores.get(team_name);因为get返回的是一个OptionV所以这里的结果也被装到了Some里如果哈希映射中没有键所对应的值那么就会返回None。 同样可以使用for循环来遍历哈希映射中所有的键值对。示例 use std::collections::HashMap; let mut scores HashMap::new(); scores.insert(String::from(Blue),10); scores.insert(String::from(Yellow),50); for (key,value) in scores{println!({}:{},key,value); }(4)、更新哈希映射 i、覆盖旧值 当将一个键值对插入到哈希映射后接着使用同样的键并配以不同的值来继续插入之前的键所关联的值就会被替换掉。示例 use std::collections::HashMap; let mut scores HashMap::new(); scores.insert(String::from(Blue),10); scores.insert(String::from(Blue),25); println!({:?},scores);这段程序会打印出{Blus:25}。 ii、只有键没有对应值时插入数据 在实际工作中常常需要检测一个键是否存在对应值如果不存在则为它插入一个值。哈希映射中提供了一个被称为entry的专用API来处理这种情形它接收我们想要检测的键作为参数并返回一个叫作Entry的枚举作为结果。这个枚举指明了键所对应的值是否存在。示例 use std::collections::HashMap; 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); println!({:?}, scores);iii、基于旧值来更新值 哈希映射的另外一个常见用法是查找某个键所对应的值并基于这个值来进行更新。 use std::collections::HashMap; let text hello world wonderful world; let mut map HashMap::new(); for word in text.split_whitespace() {let count map.entry(word).or_insert(0);*count 1; } println!({:?}, map);

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

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

相关文章

北京通信管理局网站备案处启迪设计集团股份有限公司

QT——tableWidget-跳变之舞V1.0-记录学习【1】 文章目录 QT——tableWidget-跳变之舞V1.0-记录学习【1】前言一、利用QT创建项目文件1.1 完整项目文件如下图所示:1.2 演示: 二、声明文件:2.1 主界面声明文件:mainwindow.h;2.2 控制窗口声明文…

搭建网站需要学什么软件下载wordpress如何访问量

惯例闲话:最近和老婆大人商议买车事宜,闲人以为会陷入买油车还是电车的纠结,没想到老婆大人无比坚定,买电车。在买车这方面,老婆的想法居然比闲人超前。闲人对车定位在代步工具,2年前,对车还是印…

网站开发设计体会wordpress亲子模板

一些做了二十多年外贸的老公司,早期就通过使用ERP软件来进行订单的处理,但是随着互联网的发展,用的年岁久了,软件运行速度也变卡了,看到别人家的新功能也眼馋,但是就是不敢升级,担心一升级&…

国外html5网站建设研究现状想做网站建设

前言 HTTP/1.1 是目前广泛应用的网络协议之一,虽然已经存在多年,但我们仍然可以通过优化来提升其性能和效率。本文将从优化思路的角度出发,探讨如何在 HTTP/1.1 协议下实现优化,包括避免发送重复 HTTP 请求、减少 HTTP 请求次数、…

天津星创网站建设有限公司门户网站建设存在的问题和差距

977. 有序数组的平方y 思路,原数组是有序的,但是因为负数平方后可能变无序了,因此利用双指针遍历原数组,比较 nums[left]*nums[left]和nums[right]*nums[right]谁更大,然后对新数组赋值 class Solution {public int…

微信如何做积分商城网站深圳app开发公司前十名

不知不觉,关于Spring事务的文章已经写了五篇了。老实讲我自己不断质疑过自己:现在写这些文章还有意义吗?当前的市场已经成什么样了,为什么还要固守这落后的技术?但是贝索斯一次接受访谈的回答,让我写下去的…

如何优化企业网站哪个网站做加盟

电话光端机就是把传统的电话信号转换成光信号,可通过光纤传输电话、以太网、音频的设备,让电话信号能够传输的更长距离,而且传输速率上也有很大的提高。电话光端机和PDH光端机用法各不一样,而PDH光端机简单的说是通过光纤来传输E1信号和100M以太网信号。…

手机客户端网站怎么做eclipse 开发jsp网站开发

跟着B站的视频敲了一个略微复杂的WPF界面,链接如下.在这里我详细的写一份博客进行设计总结. 系统介绍和配置及主窗口设计_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wy421Y7QD?p1&vd_source4796b18a2e4c1ec8a310391a5644b6da 成果展示 实现过程 总体来说,我的…

网站建设费用计入管理费用的哪个科目宁波制作网站企业

2019独角兽企业重金招聘Python工程师标准>>> 1、导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 存放位置比如: mysqldump -u root -p project > c:/a.sql 2.导出一个表的结构,并且带表中的数据 mysqldump -u 用户名 -p 数据库名 …

asp网站发布ftp长春市做网站哪家好

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

php网站模板怎么用网页制作论坛

一、问题描述 该问题的具体表现就如上图一样,模块——”spring-ioc-xml-01“的应该有一个蓝色的方块。现在蓝色方块缺失了之后,我们需要让maven工程重新识别出这个模块。 二、问题分析 出现这种问题的原因:是当前的maven工程没有能够成功的识…

汕头网站建设方法港北网站建设

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 多线程向来是面试的重灾…

简述电子商务的概念优化设计方案

技术背景 一般情况下我们会选择使用明文形式来存储数据,如json、txt、csv等等。如果是需要压缩率较高的存储格式,还可以选择使用hdf5或者npz等格式。还有一种比较紧凑的数据存储格式,就是直接按照二进制格式存储。这种格式下,存储…

网站关键词如何快速上首页wordpress远程下载

目录 vue2的设置方法 vue3的设置方法 1.vue3兼容vue2的写法 2.vue3没有使用setup语法糖 3.vue3的setup会自动生成name 4.使用插件 设置name的用处&#xff1a;页面缓存需要识别页面的唯一name属性才可以缓存 vue2的设置方法 <script>export default {name: "…

网站开发问题网店运营推广网站

1.首先需要使用 composer 在命令行安装最新版本的 intervention/image &#xff1a; composer require intervention/image2.注册服务提供者及别名&#xff08;Laravel 版本 ≤ 5.4&#xff09; 如果你的 laravel 版本小于或等于 5.4&#xff0c;安装后需要注册服务提供者和别…

河北网络推广公司哈尔滨网络建设网络优化

除了前一节讨论的拉电阻基本使用方法外&#xff0c;上拉电阻也可以提升高电平的电压阈值&#xff0c;以便于前后级信号相匹配&#xff0c;比如&#xff0c;TTL逻辑电平驱动CMOS逻辑电平时&#xff0c;我们通常会添加一个上拉电阻R1&#xff0c;如下图所示&#xff1a;But Why&a…

旅游网站结构图建设一个货架网站

https://mastergo.com/files/home 这个网站是一个设计图片的网站 ui设计方面的网站 有很多优秀的资源 比如App设计 可以直接用的图片 和设计模板 也可以像ps 一样 设计自己的图片或者ui图 适合前端和ui开发者使用 可以丰富自己的审美观

怎么做装修网站平台代理公司注册要提供什么资料

在此博客中&#xff0c;我将解释如何为您的Mule CloudHub应用程序启用AWS Cloudwatch日志 。 AWS提供了Cloudwatch Logs Services&#xff0c;以便您可以更好地管理日志。 它比松散便宜。 由于cloudhub会自动翻转超过100 MB的日志&#xff0c;因此我们需要一种机制来更有效地管…

多语言网站 推广网站建设语音

配置路由式Proxy ARP示例 组网图形 图1 配置路由式Proxy ARP组网图 路由式Proxy ARP简介配置注意事项组网需求配置思路操作步骤配置文件 路由式Proxy ARP简介 企业内部进行子网划分时&#xff0c;可能会出现两个子网网络属于同一网段&#xff0c;但是却不属于同一物理网络的情…