前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >20.Rust-切片

20.Rust-切片

原创
作者头像
面向加薪学习
修改2022-09-04 11:39:07
4080
修改2022-09-04 11:39:07
举报
文章被收录于专栏:面向加薪学习面向加薪学习

切片是只向一段连续内存的指针。在 Rust 中,连续内存够区间存储的数据结构:数组(array)、字符串(string)、向量(vector)。切片可以和它们一起使用,切片也使用数字索引访问数据。下标索引从0开始。slice 可以指向数组的一部分,越界的下标会引发致命错误(panic)。

切片是运行时才能确定的,并不像数组那样编译时就已经确定了。

切片的定义

代码语言:txt
复制
let 切片值 = &变量[起始位置..结束位置]
  1. 起始位置..结束位置,这是一个左闭右开的区间。
  2. 起始位置最小值是0
  3. 结束位置是数组、向量、字符串的长度。
代码语言:txt
复制
fn main() {
   let mut v = Vec::new();
   v.push("Go语言极简一本通");
   v.push("Go语言微服务架构核心22讲");
   v.push("从0到Go语言微服务架构师");
   println!("len:{:?}",v.len());
   let s1=&v[1..3];
   println!("s1:{:?}",s1);
}
//输出
len:3
s1:["Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"]

切片当参数

切片通过引用的方式传递给函数。

代码语言:txt
复制
fn show_slice(s:&[&str]){
   println!("show_slice函数内:{:?}",s);
}
show_slice(s1);//把上面的s1传递给函数show_slice
//输出 show_slice函数内:["Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"]

可变切片

如果我们声明的原数据是可变的,同时定义切片也有&mut关键字,就可以更改切片元素来更改元数据了。

代码语言:txt
复制
fn modify_slice(s: &mut [&str]) {
   s[0] = "这个阶段已学习完毕";
   println!("modify_slice:{:?}", s);
}
let mut v2 = Vec::new();
v2.push("Go语言极简一本通");
v2.push("Go语言微服务架构核心22讲");
v2.push("从0到Go语言微服务架构师");
println!("modify_slice之前:{:?}", v2);

modify_slice(&mut v2[1..3]);
println!("modify_slice之后:{:?}", v2);

//输出
modify_slice之前:["Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"]
modify_slice:["这个阶段已学习完毕", "从0到Go语言微服务架构师"]
modify_slice之后:["Go语言极简一本通", "这个阶段已学习完毕", "从0到Go语言微服务架构师"]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 切片的定义
  • 切片当参数
  • 可变切片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档