从矢量中删除元素
回答
这就是我想出迄今(也使得借检查开心):
let index = xs.iter().position(|x| *x == some_x).unwrap();
xs.remove(index);
我仍然等待找到更好的方法来做到这一点,因为这很丑陋。
注:我的代码假定元素确实存在(因此为.unwrap()
)。
迭代器有一个position()
方法,它返回匹配谓词的第一个元素的索引。相关问题:Is there an equivalent of JavaScript's indexOf
for Rust arrays?
和代码示例:
fn main() {
let mut vec = vec![1, 2, 3, 4];
println!("Before: {:?}", vec);
let removed = vec.iter()
.position(|&n| n > 2)
.map(|e| vec.remove(e))
.is_some();
println!("Did we remove anything? {}", removed);
println!("After: {:?}", vec);
}
这并不编译:'xs.remove(xs.iter()位置(| X | * X == some_x)。 unwrap());' - “不能借用'xs'作为不可变的,因为它也被借用为可变” – 2014-10-07 18:53:16
@Kai Sellgren:也被称为:不要修改你正在迭代的容器。 – 2014-10-10 13:11:39
可以使用retain
method但它会删除该值的每一个实例:
fn main() {
let mut xs = vec![1, 2, 3];
let some_x = 2;
xs.retain(|&x| x != some_x);
println!("{:?}", xs); // prints [1, 3]
}
有一个实验性的API,叫Vec::remove_item()
。它仍然不稳定,所以它不适用于稳定的编译器。但最终可能会稳定下来(tracking issue)。 。
根据该方法,做你想要真的是很简单:
let removed = xs.remove_item(&some_x);
- 1. 从矢量中删除元素
- 2. 如何从矢量中删除元素?
- 3. Matlab:从矢量中删除元素
- 4. 删除矢量元素
- 5. 删除元素从矢量错误C++
- 6. 删除循环中的矢量元素
- 7. 从矢量中清除元素
- 8. Java矢量/清单元素删除
- 9. 删除循环内的矢量元素
- 10. C++矢量实现 - 删除元素
- 11. 方案:如何删除/删除矢量中的元素
- 12. 从满足条件矢量的矢量中擦除元素
- 13. 如何从矢量中删除重复的元素?
- 14. 从矢量范围中删除特定元素
- 15. 如何根据条件从矢量中删除元素?
- 16. 如何在循环播放时从矢量中删除元素?
- 17. 从字符串矢量中删除空元素
- 18. 按值向量删除矢量中的元素
- 19. 把元素从矢量插入队列,然后清除矢量
- 20. 从对象的矢量按值擦除矢量元素
- 21. 从元素中删除元素而不删除元素后
- 22. 从矢量和QVBoxLayout删除
- 23. 从列表中增量删除元素
- 24. 从多维向量中删除元素
- 25. 擦除程序中的矢量元素
- 26. R:从矢量元素
- 27. 从一个矢量删除另一个向量的所有元素中的R
- 28. 如何擦除矢量矢量中的元素?
- 29. 如何删除矢量的特定元素中的空格?
- 30. 删除矢量中的特定元素组?
请注意,stdlib仍在设计中,因此它可能缺少其他语言中常见的一些功能。随意提交公关添加! – aochagavia 2014-10-08 08:52:29