将结构数组映射到 Rust 中的另一个结构数组而无需克隆

问题描述

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

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

fn get() -> Vec<keyvalue1> { /* ... */ }

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

struct keyvalue2 {
    key: Vec<u8>,}

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

let convertedItems = items.iter().map(|kv| -> keyvalue2{
  key: key.clone(),value: value.clone()
}).collect()

虽然这有效,但它克隆了两个低效的向量。我不再需要原始的 items 向量,所以我想将所有权从 keyvalue1 转移到 keyvalue2,但我还没有找到方法来做到这一点。

解决方法

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

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

struct KeyValue2 {
    key: Vec<u8>,}

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

playground