我有一个具有 type 属性的结构HashMap。我想实现IntoIterator这个结构的特征,以便我可以迭代它的HashMap属性。问题是我陷入了终生地狱:
pub struct ProcessList {
map: HashMap<ProcessPtr, usize>,
}
impl ProcessList {
pub fn new() -> ProcessList {
ProcessList {
map: HashMap::new(),
}
}
pub fn add(self, process: ProcessPtr, nb: usize) {
match self.map.contain_key(process) {
true => self.map[process] += nb,
false => self.map.insert(process, nb),
};
}
}
impl<'a> IntoIterator for ProcessList {
type Item = (&'a ProcessPtr, &'a usize);
type IntoIter = Iter<'a, ProcessPtr, usize>;
fn into_iter(self) -> Self::IntoIter {
self.map.into_iter()
}
}
Run Code Online (Sandbox Code Playgroud)
查看stdlib源代码IntoIterator中如何实现 forHashMap
如果您想要实现,IntoIterator则ProcessList根本不需要引用和生命周期:
use std::collections::HashMap;
use std::collections::hash_map::IntoIter;
#[derive(Eq,PartialEq,Hash)]
pub struct ProcessPtr;
pub struct ProcessList {
map: HashMap<ProcessPtr, usize>,
}
impl ProcessList {
pub fn new() -> ProcessList {
ProcessList {
map: HashMap::new(),
}
}
pub fn add(self, process: ProcessPtr, nb: usize) {
/* Bunch of errors here
match self.map.contains_key(process) {
true => self.map[process] += nb,
false => self.map.insert(process, nb),
};
*/
}
}
impl IntoIterator for ProcessList {
type Item = (ProcessPtr, usize);
type IntoIter = IntoIter<ProcessPtr, usize>;
fn into_iter(self) -> Self::IntoIter {
self.map.into_iter()
}
}
fn main(){
}
Run Code Online (Sandbox Code Playgroud)
此外,您的代码在函数中包含一些错误add。
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |