rust - 如何插入HashMap取消引用的LinkedList迭代器?
问题描述
如何解决屏幕截图上的问题?我已经尝试让它可变,但这不是重点。它可能是什么,如何摆脱它?我将感谢代码中的更改。
截屏:
let mut buf = vec![0 as u8; 4096];
for stream in listener.incoming() {
match stream {
Ok(mut stream) => {
match stream.read(&mut buf) {
Ok(size) => {
//Get List of names
let names: LinkedList<String> = serde_json::from_slice(&buf[..size])?;
for name in names.iter() {
if (*data).available.contains_key(&*name) {
//If file already exist just update Vec of IP
(*data)
.available
.get_mut(&*name)
.unwrap()
.push(stream.peer_addr().unwrap());
} else {
//In another case - adding file with first IP that share it
let mut v: Vec<SocketAddr> = Vec::new();
v.push(stream.peer_addr().unwrap());
(*data).available.insert(*name, v);
}
}
}
Err(_) => {
println!("An error occurred, {}", stream.peer_addr().unwrap());
}
}
}
Err(e) => {
println!("Error: {}", e);
}
}
}
解决方案
您确定要 aLinkedList
而不是 aVec
作为 JSON 解析器的输出吗?从LinkedList
文档:
使用它几乎总是更好,
Vec
或者VecDeque
因为基于数组的容器通常更快,内存效率更高,并且可以更好地利用 CPU 缓存。
要解决您的问题,您应该循环names
而不是names.iter()
. 这将使列表在for
循环后无法使用。然后,您必须删除代码中的取消引用,即写&name
而不是 " &*name
" 和name
而不是*name
. 但是,您根本不应该写&*name
,因为in&
和*
in&*name
相互抵消。
推荐阅读
- angular - 在 app.module.ts 中导入模块做什么,在模板类中逐类导入做什么
- java - 尝试使用 JPA 查找使用复合键的对象时出错
- flutter - 清理颤振中选择的单选按钮时出现问题
- python - 除了之后如何继续?
- python - 从 Github ipynb 文件下载和访问 CSV 文件
- typescript - 无法调用可能是“未定义”打字稿的对象
- azure - Azure Front Door - 如何禁用可直接访问的 Web APP 以直接访问
- java - 如何以编程方式查找 Web 浏览器的版本?
- java - 试图用 jsoup 抓取 poocoin.app
- arrays - c中的字符串数组只存储给它的最后一个值