如何解决将结构向量转换为另一结构向量的惯用方式是什么
我的函数将Vec
的结构体作为参数,并将其每个元素放入另一个向量中作为新的结构域:
fn new(cards: Vec<Card<'t>>) -> Self {
CardsConnection {
edges: cards.iter().map(|c| CardsConnectionEdge {
cursor: c.id.clone(),node: *c
}).collect::<Vec<CardsConnectionEdge>>()
}
}
我真的很想搬家,所以只有新的vector应该拥有Card
实例。因此,由于map得到了引用,因此我想取消引用以移动值,但是出现以下错误:
error[E0507]: cannot move out of `*c` which is behind a shared reference
--> src/model.rs:74:23
|
74 | node: *c
| ^^ move occurs because `*c` has type `model::Card<'_>`,which does not implement the `copy` trait
error: aborting due to prevIoUs error; 8 warnings emitted
fn new(cards: Vec<Card<'t>>) -> Self {
let mut edges = Vec::<CardsConnectionEdge>::with_capacity(cards.len());
for c in cards {
edges.push(CardsConnectionEdge {
cursor: c.id.clone()
node: c
})
}
CardsConnection {
edges
}
}
但看起来有点笨拙。
是否有一种方法可以使用迭代器或某种map函数来完成相同的工作?还是解决此类问题的惯用方式是什么?
解决方法
您正在寻找other_condition
into_iter()
函数通过引用对项目进行迭代,而iter
函数对项目进行迭代,将其移至新的作用域。
因此into_iter
与for c in cards {...}
基本相同。两者都将卡的元素移到cards.into_iter().for_each(|c| ... )
范围内。
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。