在 Rust 中将结构的 Vec 映射到结构的另一个 Vec,无需克隆

Ram*_*ein 4 struct closures iterator rust map-function

我使用具有以下结构的库:

struct KeyValue1 {
    key: Vec<u8>,
    value: Vec<u8>,
}

fn get() -> Vec<KeyValue1> { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

我需要将此向量转换为具有以下结构的几乎相似的向量:

struct KeyValue2 {
    key: Vec<u8>,
    value: Vec<u8>,
}
Run Code Online (Sandbox Code Playgroud)

为了能够从一个向量转换为另一个向量,我目前使用以下代码:

let convertedItems = items.iter().map(|kv| -> KeyValue2{
  key: key.clone(),
  value: value.clone()
}).collect()
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它克隆了两个载体,效率很低。我不再需要原始items向量,因此我想将所有权从 转移KeyValue1KeyValue2,但我还没有找到方法来做到这一点。

kfe*_*v91 7

如果转换后不需要它,请使用into_iter()而不是iter()在向量上:items

struct KeyValue1 {
    key: Vec<u8>,
    value: Vec<u8>,
}

struct KeyValue2 {
    key: Vec<u8>,
    value: Vec<u8>,
}

fn map_key_values(items: Vec<KeyValue1>) -> Vec<KeyValue2> {
    items
        .into_iter()
        .map(|kv| KeyValue2 {
            key: kv.key,
            value: kv.value,
        })
        .collect()
}
Run Code Online (Sandbox Code Playgroud)

操场