首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为迭代其IntoIterator属性的结构实现HashMap

为迭代其IntoIterator属性的结构实现HashMap
EN

Stack Overflow用户
提问于 2016-02-28 15:05:30
回答 1查看 677关注 0票数 5

我有一个带有HashMap类型属性的结构。我想为这个结构实现IntoIterator特性,这样我就可以迭代它的HashMap属性。问题是我遇到了一辈子的地狱:

代码语言:javascript
复制
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()
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-28 17:11:47

查看IntoIterator如何在stdlib 来源中为HashMap实现

如果要为IntoIterator实现ProcessList,则根本不需要引用和生存期:

代码语言:javascript
复制
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(){
}

此外,您的代码还包含add函数中的一些错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35684136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档