如何获取子切片?

How to get subslices?

我有一个类型为 &[T] 的变量 a;如何获得对 a 的子切片的引用?

作为一个具体的例子,我想得到 a 的前半部分和后半部分,前提是 a.len() 是偶数。

你为此使用切片语法:

fn main() {
    let data: &[u8] = b"12345678";
    println!("{:?} - {:?}", &data[..data.len()/2], &data[data.len()/2..]);
}

(试试here)

一般语法是

&slice[start_idx..end_idx]

给出从 slice 派生的切片,从 start_idx 开始到 end_idx-1 结束(即不包括右侧索引处的项目)。可以省略任何一个索引(甚至两个),相应地这意味着零或切片长度。

注意,如果你想在某个位置将一个切片分成两个切片,通常使用split_at()方法更好:

let data = b"12345678";
let (left, right): (&[u8], &[u8]) = data.split_at(4);

此外,这是从另一个可变切片中获取两个可变切片的唯一方法:

let mut data: Vec<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8];
let data_slice: &mut [u8] = &mut data[..];
let (left, right): (&mut [u8], &mut [u8]) = data_slice.split_at_mut(4);

然而,这些基本的东西在 the official book on Rust 中有解释。如果你想学习 Rust,你应该从那里开始。