從矢量中刪除元素
回答
這就是我想出迄今(也使得借檢查開心):
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