Rust语言中的哈希表

 更新时间:2024年02月18日 16:07:30   作者:名为逗比  
哈希表也是集合中的一种,也是最常用的集合形式,目前Rust语言核心部分没有对哈希表进行实现,是使用标准库提供的,这篇文章主要介绍了Rust语言之哈希表,需要的朋友可以参考下

Rus设计语言官方教程

哈希表(Hash map)

哈希表也是集合中的一种,也是最常用的集合形式,目前Rust语言核心部分没有对哈希表进行实现,是使用标准库提供的。

一、新建哈希表

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    println!("{:?}",scores); //{"Yellow": 50, "Blue": 10}
}

二、访问某个元素

索引访问

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    println!("value: {}",scores["Blue"]); // 10
}

GET方法

官方教程上的方法

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    let team_name = String::from("Blue");
    let score = scores.get(&team_name).copied().unwrap_or(0);
    println!("value: {}",score); // 10
}

以上两种方法都必须保证访问的元素存在,否则会报错

二、插入新元素

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    println!("{:?}",scores); //{"Yellow": 50, "Blue": 10}
    scores.insert(String::from("Red"), 100);
    println!("{:?}",scores);// {"Red": 100, "Yellow": 50, "Blue": 10}
}

这里可以看出,哈希表中的元素是没有顺序的

三、遍历哈希表

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    for (key, value) in &scores {
        println!("{key}: {value}");
    }
}
=>
Yellow: 50
Blue: 10

四、检查某个元素是否存在

Rust语言中检查哈希表元素是否存在,有两种方法,contains_key方法和entry

  • contains_key方法用于检查HashMap中是否包含特定的键。它返回一个布尔值,指示键是否存在。
  • entry方法用于高效地处理键值对的插入和更新,它返回一个Entry枚举,可以是Occupied(键已存在)或Vacant(键不存在)。

contains_key方法

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    if scores.contains_key("Red"){
        println!("value :{}",scores["Red"]);
    }else {
        println!("Red is not found")
    }
}
=>Red is not found

entry方法

entry方法多用于对值的更新,eor_insert方法在键对应的值存在时就返回这个值的可变引用,如果不存在则将参数作为新值插入并返回新值的可变引用

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    scores.entry(String::from("Red")).or_insert(100);
    scores.entry(String::from("Blue")).or_insert(50);
    println!("{:?}", scores);//{"Blue": 10, "Red": 100, "Yellow": 50}
}

五、元素更新

使用contains_key+insert 的方法

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    let team_list =["Blue","Red"];
    for i in team_list{
        if scores.contains_key(i){
            scores.insert(i.to_string(), scores[i]+50);
        }else{
            scores.insert(i.to_string(), 50);
        }
    }
    println!("{:?}",scores);//{"Red": 50, "Blue": 60, "Yellow": 50}
}

使用entry方法

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    let team_list =["Blue","Red"];
    for i in team_list{
        let count = scores.entry(i.to_string()).or_insert(0);
        *count += 50;
    }
    println!("{:?}",scores);//{"Red": 50, "Blue": 60, "Yellow": 50}
}

相比使用contains_key+insert 的方法,这种方法更优雅。

六、删除元素

fn main() {  
    use std::collections::HashMap;
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);
    scores.insert(String::from("Red"), 80);
    println!("{:?}",scores);//{"Blue": 10, "Yellow": 50, "Red": 80}
    scores.remove("Red");
    println!("{:?}",scores);//{"Blue": 10, "Yellow": 50}
}

到此这篇关于Rust语言之哈希表的文章就介绍到这了,更多相关Rust哈希表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Rust 语言println! 宏的格式占位符详解

    Rust 语言println! 宏的格式占位符详解

    这篇文章主要介绍了Rust语言的println!宏的格式占位符,这只是格式说明符的一部分清单,Rust 的格式化系统非常灵活和强大,支持更多的选项和组合,需要的朋友可以参考下
    2024-03-03
  • Rust中的Enum与Struct示例详解

    Rust中的Enum与Struct示例详解

    在 Rust 中,struct(结构体)和enum(枚举)是两种核心的自定义类型,分别用于组合相关数据和表示互斥的可能性,这篇文章主要介绍了Rust中的Enum与Struct示例,需要的朋友可以参考下
    2025-10-10
  • 在Rust中要用Struct和Enum组织数据的原因解析

    在Rust中要用Struct和Enum组织数据的原因解析

    在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有可能的状态,本文将通过具体示例,深入探讨为什么在Rust中必须使用struct和enum来管理数据,感兴趣的朋友一起学习吧
    2025-02-02
  • Rust使用lettre实现邮件发送功能

    Rust使用lettre实现邮件发送功能

    这篇文章主要为大家详细介绍了Rust如何使用lettre实现邮件发送功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • Rust编译报错:link.exe未找到问题分析及解决

    Rust编译报错:link.exe未找到问题分析及解决

    文章介绍了两个编译错误及其解决方法,第一个是关于`link.exe`未找到的问题,解决方法是安装Visual Studio或构建工具,选择相应的C++开发负载并安装所需组件,第二个是关于`std::str::FromStr`未解析的错误,在Rust中可能是因为版本或配置问题,但不影响编译和运行
    2026-04-04
  • Rust调用Windows API 如何获取正在运行的全部进程信息

    Rust调用Windows API 如何获取正在运行的全部进程信息

    本文介绍了如何使用Rust调用WindowsAPI获取正在运行的全部进程信息,通过引入winapi依赖并添加相应的features,可以实现对不同API集的调用,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Rust 语言中的dyn 关键字及用途解析

    Rust 语言中的dyn 关键字及用途解析

    在Rust中,"dyn"关键字用于表示动态分发(dynamic dispatch),它通常与trait对象一起使用,以实现运行时多态, 在Rust中,多态是通过trait和impl来实现的,这篇文章主要介绍了Rust 语言中的 dyn 关键字,需要的朋友可以参考下
    2024-03-03
  • Rust指南之生命周期机制详解

    Rust指南之生命周期机制详解

    Rust 生命周期机制是与所有权机制同等重要的资源管理机制,之所以引入这个概念主要是应对复杂类型系统中资源管理的问题,这篇文章主要介绍了Rust指南之生命周期机制详解,需要的朋友可以参考下
    2022-10-10
  • rust中的match表达式使用详解

    rust中的match表达式使用详解

    在rust中提供了一个极为强大的控制流运算符match,这篇文章主要介绍了rust中的match表达式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Rust生命周期之验证引用有效性与防止悬垂引用方式

    Rust生命周期之验证引用有效性与防止悬垂引用方式

    本文介绍了Rust中生命周期注解的应用,包括防止悬垂引用、在函数中使用泛型生命周期、生命周期省略规则、在结构体中使用生命周期、静态生命周期以及如何将生命周期与泛型和特质约束结合,通过这些机制,Rust在编译时就能捕获内存安全问题
    2025-02-02

最新评论