繁体   English   中英

如何在Rust中提取字符串向量的元素?

[英]How to extract elements of a vector of strings in Rust?

假设我有以下代码

fn extract() -> Vec<String> {
    let data = vec!["aaa".to_string(), "bbb".to_string(), "ccc".to_string()];
    vec![data[0], data[2]]
}

在实践中,我从文件中读取data

显然,这不会编译,因为我正在从向量data拉出字符串,使向量处于未定义状态。 但是,从概念上讲,它应该起作用,因为无论如何我以后都不会使用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]
}

我该如何在不克隆字符串的情况下从向量中提取特定元素?

Vec为此具有特殊的方法。 swap_removeremove (警告,线性复杂度), 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)]
}

向量中不能有“孔”。 因此,当您从其中移出某些内容时,您可以更改其余元素的索引(使用removeswap_remove ),或将其替换为其他内容。

为什么不按顺序使用向量,而忽略不需要的向量呢? 如果需要保存一些元素以备后用,则可以使用data.iter().filter(...).collect() 如果确实要避免复制任何字符串,可以将它们包装在Rc以便仅复制指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM