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

标签 vector rust ownership

假设我有以下 code :

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

在实践中,我从文件中读取数据

显然,这无法编译,因为我从向量 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)]
}

关于vector - 如何在 Rust 中提取字符串向量的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056232/

相关文章:

algorithm - 如何迭代一个向量并沿途插入/删除/修改多个元素?

generics - 处理 `Into` 泛型时的 Rust 生命周期问题

rust - 消费 self 并返回它对性能有何影响?

matlab - 如何在 Matlab 中将向量转换为字符串

c++ - 为什么这个 XMVector3Transform 调用没有返回正确的结果?

C++ 访问 vector 的 vector 出现段错误

rust - 将泛型类型绑定(bind)到需要生命周期的特征时未使用的类型参数

rust - 循环中的多个可变引用

sql - Service Broker 和数据库所有权不匹配

c++ - 如何识别 vector 迭代器是否已到达 vector 末尾?