list - 运行迭代器后如何使生锈列表不被删除
问题描述
我将 vec 参数传递给 rust 中的函数,如下所示:
pub fn songs(playlist_records: Vec<QueryFavorites>) -> Vec<MusicResponse> {
}
第一步,我从中获取 IDplaylist_records
以执行查询,这是代码:
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
为 use 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();
推荐阅读
- android - 更改相机拍摄的图像格式并更改图像大小并发送到 SQL Server
- javascript - React - 我正在传递给函数的参数并且它没有被定义
- powershell - Mimikatz - 处理文件路径 Dpapi::chrome 中的空格问题
- javascript - 如何为富文本编辑器中的选定范围赋予不同的颜色?
- java - 来自 jnlp 文件的 .jar 文件路径
- android - 导航xml在android studio中没有预览
- c# - 如何处理 NX Open 中的打开文件错误
- node.js - 在不同选项卡之间发出事件
- regex - 用于 .co 域的 cpanel 电子邮件过滤的正则表达式,但不匹配 .co.uk
- postgresql - 为 psycopg2-binary (setup.py) 错误构建轮子,为 psycopg2-binary 错误运行 setup.py install