相关疑难解决方法(0)

有没有办法根据谓词排出向量的部分?

我试图从矢量中删除一些元素,基于谓词,并收集结果.这是一个具有预期结果的(不工作)示例:

let mut v: Vec<i32> = vec![1, 2, 3, 4, 5, 6];

let drained: Vec<i32> = v.iter().filter(|e| (*e) % 2 == 0).drain(..).collect();

assert_eq!(v, vec![1, 3, 5]);
assert_eq!(drained, vec![2, 4, 6]);
Run Code Online (Sandbox Code Playgroud)

这导致错误

error[E0599]: no method named `drain` found for type `std::iter::Filter<std::slice::Iter<'_, i32>, [closure@src/main.rs:4:45: 4:62]>` in the current scope
 --> src/main.rs:4:64
  |
4 |     let drained: Vec<i32> = v.iter().filter(|e| (*e) % 2 == 0).drain(..).collect();
  |                                                                ^^^^^
Run Code Online (Sandbox Code Playgroud)

我看过几种不同的选择,它们似乎都没有做我想做的事情:

  • Vec::retain 从向量中删除元素,但不会返回已删除元素的所有权.

  • v.drain(..).filter(condition).collect()返回正确的值,drained但清空整个向量.

predicate vector rust

15
推荐指数
1
解决办法
858
查看次数

是否可以就地过滤矢量?

我想从a中删除一些元素Vec,但是vec.iter().filter().collect()使用借来的项创建一个新的向量.

我想在Vec没有额外内存分配的情况下改变原始内容(并将已删除元素的内存保留为向量的额外容量).

iterator rust

14
推荐指数
2
解决办法
1289
查看次数

标签 统计

rust ×2

iterator ×1

predicate ×1

vector ×1