为结构体实现 IntoIterator,迭代其 HashMap 属性

Moe*_*ius 7 rust

我有一个具有 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)

aSp*_*pex 4

查看stdlib源代码IntoIterator中如何实现 forHashMap

如果您想要实现,IntoIteratorProcessList根本不需要引用和生命周期:

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