Rust切片
切片是指向内存块的指针,可用于访问存储在连续内存块中的数据部分,它可以与数组、向量和字符串之类的数据结构一起使用,切片使用索引访问部分数据,其大小在运行时确定。
切片是指向实际数据的指针,它们通过引用传递给函数,也称为借用。
例如,切片可用于获取字符串值的一部分,字符串切片是指向实际字符串对象的指针,因此需要指定字符串的开始和结束索引,索引从0开始,就像数组一样。
语法
let sliced_value = &data_structure[start_index..end_index]
最小索引值为0,最大索引值为数据结构的大小,注意end_index不会包含在最终字符串中。
以下代码从字符串中提取5个字符(从索引4开始)。
fn main() { let n1 = "Tutorials".to_string(); println!("length of string is {}",n1.len()); let c1 = &n1[4..9]; //获取4,5,6,7和8索引处的字符 println!("{}",c1); }
length of string is 9 rials
例子-切片整数数组
main()函数声明一个包含5个元素的数组,它调用use_slice()函数并将其传递给三个元素(指向数据数组)的切片,切片通过引用传递,use_slice()函数输出切片的值及其长度。
fn main(){ let data = [10,20,30,40,50]; use_slice(&data[1..4]); //这是一段时间内的有效借用元素 } fn use_slice(slice:&[i32]) { //正在切片或借用i32数组的一部分 println!("length of slice is {:?}",slice.len()); println!("{:?}",slice); }
length of slice is 3 [20, 30, 40]
可变切片
&mut关键字可用于将切片标记为可变的。
fn main(){ let mut data = [10,20,30,40,50]; use_slice(&mut data[1..4]); //传递引用 20, 30 and 40 println!("{:?}",data); } fn use_slice(slice:&mut [i32]) { println!("length of slice is {:?}",slice.len()); println!("{:?}",slice); slice[0] = 1010; //用1010代替20 }
length of slice is 3 [20, 30, 40] [10, 1010, 30, 40, 50]
上面的代码将可变切片传递给use_slice()函数,该函数修改原始数组的第二个元素。