微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将结构数组映射到 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。