gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:00:35 24 4
gpt4 key购买 nike

我有一个结构,其属性类型为 HashMap。我想为此结构实现 IntoIterator 特性,以便我可以迭代它的 HashMap 属性。问题是我遇到了一生的 hell :

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()
}
}

最佳答案

查看 IntoIterator 是如何在标准库中为 HashMap 实现的 source

如果你想为 ProcessList 实现 IntoIterator,你根本不需要引用和生命周期:

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 函数中包含一些错误。

关于rust - 为迭代其 HashMap 属性的结构实现 IntoIterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35684136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com