小编mlu*_*ucy的帖子

如何在检查其他元素时惯用地迭代可变向量

我想写这样的代码:

let mut v: Vec<Object> = Vec::new();
for e in v.iter_mut() {
  if e.some_predicate() {
    e.val = v.iter().filter(|o| o.some_predicate()).count();
  }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 for 循环接受可变借用,然后iter尝试进行不可变借用。我理解为什么借用检查器不喜欢生成的特定类型,但是我尝试执行的操作似乎是安全的,如果我将其重写为使用索引,它可以正常工作:

let mut v: Vec<Object> = Vec::new();
for i in 0..v.len() {
  if v[i].some_predicate() {
    v[i].val = v.iter().filter(|o| o.some_predicate()).count();
  }
}
Run Code Online (Sandbox Code Playgroud)

在 Rust 中这样做的惯用方法是什么?

rust

5
推荐指数
1
解决办法
68
查看次数

标签 统计

rust ×1