Lis*_*one 3 vector ownership rust
假设我有以下代码:
fn extract() -> Vec<String> {
let data = vec!["aaa".to_string(), "bbb".to_string(), "ccc".to_string()];
vec![data[0], data[2]]
}
Run Code Online (Sandbox Code Playgroud)
在实践中,我data从文件中读取。
显然,这不会编译,因为我从 vector 中拉出字符串data,使 vector 处于未定义状态。但是,从概念上讲,它应该可以工作,因为data无论如何我都不会使用。
我可以使用mem::replace,但这似乎很疯狂:
fn extract() -> Vec<String> {
let mut data = vec!["aaa".to_string(), "bbb".to_string(), "ccc".to_string()];
let a = mem::replace(&mut data[0], "".to_string());
let c = mem::replace(&mut data[2], "".to_string());
vec![a, c]
}
Run Code Online (Sandbox Code Playgroud)
如何从向量中提取特定元素而不必克隆字符串?
小智 5
Vec有特殊的方法。swap_remove,remove(警告,线性复杂性), drain。例如,
fn extract() -> Vec<String> {
let mut data = vec!["aaa".to_string(), "bbb".to_string(), "ccc".to_string()];
// order does matter
vec![data.swap_remove(2), data.swap_remove(0)]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |