我在rust中传递了一个vec参数给函数:
pub fn songs(playlist_records: Vec<QueryFavorites>) -> Vec<MusicResponse> {
}
第一步,我从playlist_records
获得id来执行查询,这是代码:
let ids: Vec<String> = playlist_records
.into_iter()
.map(|item| item.source_id.to_string())
.collect();
当我使用playlist_records
第二次获取字段后获得查询结果:
for query_song in &results {
let favTime: Vec<QueryFavorites> = playlist_records
.into_iter()
.filter(|item| item.source_id == query_song.source_id)
.collect();
}
告诉我playlist_records
被移动了。这是消息:
`playlist_records` moved due to this method call, in previous iteration of loop
我试着像这样借playlist_records
:
let ids: Vec<String> = &playlist_records
.into_iter()
.map(|item| item.source_id.to_string())
.collect();
似乎不起作用,我应该怎么做才能重用playlist_records
?
将into_iter
更改为使用iter
,因为into_iter
使用集合,而iter
通过引用迭代而不使用集合,这里查看更多关于差异的信息:
游乐场
let ids: Vec<String> = playlist_records
.iter()
.map(|item| item.source_id.to_string())
.collect();
let favTime: Vec<&QueryFavorites> = playlist_records
.iter()
.filter(|item| item.source_id == "someid")
.collect();
这意味着你的favTime
将是Vec<&QueryFavorites>
类型,如果这对你来说很好。否则,你可以克隆迭代器。
let favTime: Vec<QueryFavorites> = playlist_records
.iter()
.cloned()
.filter(|item| item.source_id == "someid")
.collect();
游乐场