一种获取除数组中最后一个内容以外的所有内容的方法,而不指出一行中的最后一个项目索引?

问题描述 投票:0回答:3

例如,在python中,您可以使用

a = [1,2,3]
b = a[:-1] #1,2

在锈中,它具有某种语法来获取数组的一部分range

let a = vec![1,2,3];
let b = &a[0..2]; // 1,2

问题是您必须指向最后一个索引(不包括)。如果要使用-1,将导致编译器错误

let b = &a[0..-1];
let a = vec![1,2,3];
// err msg
// let b = &a[0..-1];
//               ^^ the trait `std::ops::Neg` is not implemented for `usize`

所以我怎么能做到这一点?

arrays rust slice
3个回答
2
投票

我认为split_last是您要寻找的:它返回一个可选的2元组,其中包含对最后一个元素的引用以及直至(但不包括)最后一个元素的切片。

split_last得到您所要求的内容(a.split_last().unwrap().1假定unwrap为非空)。

如果要修改它,也有它的堂兄a


1
投票

只要预先添加split_last_mut,就可以使用split_last_mut

-1

已更新[因为OP要求使用单线:]

vec.len()

0
投票

可能不是您想要的,因为您似乎在寻求一个不太冗长的解决方案,但是可以使用fn main() { let a = vec![1, 2, 3]; println!("{:?}", &a[0..a.len() - 1]); } ;使用向量时,它会改变原始向量。

fn main() {
    let a = vec![1, 2, 3];
    println!("{:?}", &a[0..a.len() - 1]);
}
© www.soinside.com 2019 - 2024. All rights reserved.