Rust 切片
切片是指向一块内存的指针。切片可用于访问存储在连续内存块中的数据的部分。它可与数组、向量和字符串等数据结构一起使用。切片使用索引号来访问数据的部分。切片的大小在运行时确定。
切片是指向实际数据的指针。它们通过引用传递给函数,这也被称为借用。
例如,切片可用于获取字符串值的一部分。切片字符串是指向实际字符串对象的指针。因此,我们需要指定字符串的起始和结束索引。索引从0开始,就像数组一样。
语法
let sliced_value = &data_structure[start_index..end_index]
最小索引值为0,最大索引值为数据结构的大小。注意结束索引不包含在最终字符串中。
下面的图表显示了一个样本字符串 教程 ,它有9个字符。第一个字符的索引为0,最后一个字符的索引为8。
以下代码从字符串中获取5个字符(从索引4开始)。
fn main() {
let n1 = "Tutorials".to_string();
println!("length of string is {}",n1.len());
let c1 = &n1[4..9];
// fetches characters at 4,5,6,7, and 8 indexes
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]);
//this is effectively borrowing elements for a while
}
fn use_slice(slice:&[i32]) {
// is taking a slice or borrowing a part of an array of i32s
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]);
// passes references of
20, 30 and 40
println!("{:?}",data);
}
fn use_slice(slice:&mut [i32]) {
println!("length of slice is {:?}",slice.len());
println!("{:?}",slice);
slice[0] = 1010; // replaces 20 with 1010
}
结果
length of slice is 3
[20, 30, 40]
[10, 1010, 30, 40, 50]
以上代码将一个可变的切片传递给use_slice()函数。该函数修改原始数组的第二个元素。