0
点赞
收藏
分享

微信扫一扫

20.Rust-Slice(切片)

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

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

切片的定义

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

切片当参数

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

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

可变切片

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

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语言微服务架构师]
举报

相关推荐

0 条评论