📜  铁锈-切片

📅  最后修改于: 2020-11-02 04:17:43             🧑  作者: Mango


切片是指向内存块的指针。切片可用于访问存储在连续内存块中的数据部分。它可以与数组,向量和字符串之类的数据结构一起使用。切片使用索引号访问部分数据。切片的大小在运行时确定。

切片是指向实际数据的指针。它们通过引用传递给函数,也称为借用。

例如,切片可用于获取字符串值的一部分。切片的字符串是指向实际字符串对象的指针。因此,我们需要指定字符串的开始和结束索引。索引从0开始,就像数组一样。

句法

let sliced_value = &data_structure[start_index..end_index]

最小索引值为0,最大索引值为数据结构的大小。注意end_index不会包含在最终字符串。

下图显示了一个示例字符串Tutorials ,它包含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()函数。该函数修改原始数组的第二个元素。