繁体   English   中英

如何删除 Rust 哈希图?

[英]How to delete Rust hashmap?

目前我是一个菜鸟,正在学习用 Rust 构建一个简单的 CRUD 系统,但不知道如何从列表中删除一个项目。 通过列表进行映射,然后当它与待办事项哈希图中的项目匹配时,它应该从该列表中删除它。

if action == "remove" {
    match todo.remove(&item) {
        None => println!("'{}' is not present in the list", item),
        Some(_) => match todo.save() {
            Ok(_) => println!("todo saved"),
            Err(why) => println!("An error occurred: {}", why),
        },
    }
}
    
fn remove(&mut self, key: &String) -> Option<()> {
    match self.map.get_mut(key) {
        Some(v) => Some(v),
        None => None,
    }
}

有人可以告诉我如何在 Rust 中做到这一点吗?

与其获取对HashMap中值的可变引用,不如使用remove方法删除项目,该方法返回一个可能包含已删除值的Option 假设您的HashMapHashMap<String, Todo> ,您的remove方法可能如下所示:

fn remove(&mut self, key: &String) -> Option<Todo> {
    self.map.remove(key)
}

话虽如此, HashSet或其他集合可能更适合您的用例。 我还可以想象,您不想保存待办事项直接删除它,因此如果您还将操作更改为枚举,您的顶部代码块可能如下所示:

match action {
    ...
    Action::Remove(item) => {
        match todo.remove(&item) {
            Some(value) => println!("{:?} removed from list", value),
            None => println!("'{}' is not present in the list", item),
        };
    },
    ...
}

只需将self.map.get_mut(key)替换为self.map.remove(key)

  • get_mut :返回与现有键相关的值的可变引用。 Option<&mut V>
  • remove :删除键/值对,如果键存在则返回值。 Option<V>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM