我向rust中的函数传递了一个vec参数,如下所示:
pub fn songs(playlist_records: Vec<QueryFavorites>) -> Vec<MusicResponse> {
}第一步,我从playlist_records获取I以执行查询,代码如下:
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
发布于 2021-09-26 05:58:47
将into_iter更改为使用iter,因为into_iter使用集合,而iter按引用迭代,并且不使用,请参阅关于the difference here的更多信息
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();https://stackoverflow.com/questions/69332170
复制相似问题