问题描述
我使用具有以下结构的库:
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()
}