«

Rust - HashMap

ljierui 发布于 阅读:76 技术杂谈


HashMap

1、键值对的形式存储数据,一个键(key)对应一个值(value)

2、通过Hash函数:决定如何在内存中存放K和V

1、创建HashMap

1、创建空HashMap:new() 函数

2、添加数据:insert() 方法


use std::collections::HashMap;

fn main() {
    // 创建hashmap
    // 如果只创建,不插入数据的话,会报错,要指定数据类型才不会报错
    //let mut scores:HashMap<String, i32> = HashMap::new();
    let mut scores = HashMap::new();
    // 插入数据
    scores.insert(String::from("年龄"), 10);
}

2、HashMap注意事项

1、HashMap用的比较少,不在Prelude中

2、标准库对其支持比较少,没有内置的宏来创建HashMap

3、其数据是存放在heap上

4、是同构的,一个HashMap中

3、另一种创建HashMap的方式:collect方法

1、在元素类型为Tuple(元组)的Vector上使用collect方法,可以组建一个HashMaps

4、HashMap的所有权

1、对于实现了Copy trait的类型(如i32),值都会被复制到HashMap中

2、对于拥有所有权的值(如string),值会被移动,所有权会被转移到HashMap中

    let hello_hash = String::from("hello");
        let world_hash = String::from("world");
        let mut all_hash = HashMap::new();
        all_hash.insert(hello_hash, world_hash);
        // println!("{},{}",hello_hash,world_hash); 报错

5、访问HashMap的值

1、通过get()方法

// 访问HashMap的值
    let get_hello = String::from("hello");
    let jg = all_hash.get(&get_hello);
    match jg {
        Some(jg) => println!("{}",jg),
        None => println!("空")
    }

6、遍历HashMap

1、通过for循环

// 遍历HashMap
    for (k,v) in &all_hash{
        println!("{}:{}",k,v);
    }

7、更新HashMap

1、HashMap的大小可变

2、每个K同时只能对应一个V

3、更新HashMap中的数据

情况一、替换现有的v

情况二、只有K不对应任何值的情况下,才插入v

  // 更新hashmap
    // 情况一
    all_hash.insert(String::from("name"),String::from("小明"));
    all_hash.insert(String::from("name"),String::from("小宏"));
    println!("{:?}",all_hash);

    // 情况二
    // 插入一个新k,如果k中没有值,就添加一个值
    all_hash.entry(String::from("old")).or_insert(String::from("30"));

rust语言学习

推荐阅读: