在 Python 中,我可以这样做:
a = [1,2,3]
b = a[:-1] #1,2
Run Code Online (Sandbox Code Playgroud)
Rust 具有获取数组范围切片的语法,您可以在其中提供最后一个索引,不包含:
let a = vec![1, 2, 3];
let b = &a[0..2]; // [1, 2]
Run Code Online (Sandbox Code Playgroud)
如果我使用-1,它会导致编译器错误:
let a = vec![1, 2, 3];
let b = &a[0..-1];
Run Code Online (Sandbox Code Playgroud)
error[E0277]: the trait bound `usize: std::ops::Neg` is not satisfied
--> src/lib.rs:3:19
|
3 | let b = &a[0..-1];
| ^^ the trait `std::ops::Neg` is not implemented for `usize`
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
例子 :
我想
在 python 中将"x1::x2::x3::...::xn" 转换为 "x1::x2::x3::...xn-1"单行解决方案应该是
case_1 = "a::b::c";
ret = case1.split("::")[:-1]
Run Code Online (Sandbox Code Playgroud)
但它是铁锈的一条线解决方案
let case_1 = "a::b::c";
let ret = case_1.split("::").collect::<Vec<_>>() //what could i do next?
Run Code Online (Sandbox Code Playgroud)
zge*_*erd 10
-1只要vec.len()提前添加即可使用:
fn main() {
let a = vec![1, 2, 3];
println!("{:?}", &a[0..a.len() - 1]);
}
Run Code Online (Sandbox Code Playgroud)
因为 OP 要求单行,所以您可以删除换行符并使用非惯用的 Rust 格式:
fn main() {
let a = vec![1, 2, 3]; println!("{:?}", &a[0..a.len() - 1]);
}
Run Code Online (Sandbox Code Playgroud)
我认为split_last这就是您要寻找的:它返回一个可选的 2 元组,其中包含对最后一个元素的引用和一个直到(但不包括)最后一个元素的切片。
即a.split_last().unwrap().1得到你所要求的(unwrap假设它a是非空的)。
如果你想修改这些值,还有它的表亲split_last_mut。
| 归档时间: |
|
| 查看次数: |
2412 次 |
| 最近记录: |