簡體   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