我想得到路径的部分,并删除它的第一和最后一部分.

例如:

a/b/c/d.txt%b/c

我认为这可以通过简单的列表操作来完成.然而,我找不到更好的方法:

let mut comps: Vec<_> = content_file.components().skip(1).collect();
comps.reverse();
let mut ret: Vec<_> = comps.iter().skip(1).collect();
ret.reverse();

有没有更好的方法来实现这一点?

推荐答案

我个人最喜欢的as_path method of the Components iterator没有额外的分配,也不需要重复比较前缀或做其他额外的工作:

let path = Path::new("a/b/c/d.txt");
let mut components = path.components();
components.next();      // remove the first component
components.next_back(); // remove the last component
let middle = components.as_path(); // ≙ Path::new("b/c")

或者你可以写一个行,它做了一个不必要的分配:

let middle = PathBuf::from_iter(path.parent().unwrap().components().skip(1));

Rust相关问答推荐

为什么我们不能通过指针算法将Rust原始指针指向任意地址?'

从Rust调用C++虚拟方法即使在成功执行之后也会引发Access违规错误

制作一片连续整数的惯用Rust 方法?

如何导入crate-type=[";cdylib;]库?

为什么这个变量不需要是可变的?

失真图像图形捕获Api

在 Rust 中,在需要引用 self 的 struct 体方法中使用闭包作为 while 循环条件

当我try 使用 SKI 演算中的S I I实现递归时,为什么 Rust 会失败?

如何使用tracing-subscriberRust crate 构建多编写者、全局过滤订阅者

tokio::spawn 有和没有异步块

Rust ECDH 不会产生与 NodeJS/Javascript 和 C 实现相同的共享密钥

在 Bevy 项目中为 TextureAtlas 精灵实施 NearestNeighbor 的正确方法是什么?

为什么我不能克隆可克隆构造函数的Vec?

在 Rust 中如何将值推送到枚举 struct 内的 vec?

预期类型参数,发现不透明类型

为什么 Rust 编译器在移动不可变值时执行复制?

从 Cranelift 发出 ASM

我可以在不调用 .clone() 的情况下在类型转换期间重用 struct 字段吗?

如何迭代调用可能会失败的函数?操作员?

这个 match 语句的默认值应该是什么,还有一种方法可以解开 Some case (chess in rust)