12. Mapping table map.rs

/* 映射表

*/

use std::collections::HashMap;

fn test_1() {
    println!("-------------------------test_1-------------------------");
    let mut map = HashMap::new(); //这里没有声明散列表的泛型,是因为 Rust 的自动判断类型机制。
    map.insert("color", "red");
    map.insert("size", "10 m^2");
    println!("{}", map.get("color").unwrap());
    //这种用法必须保证key必须存在,否则直接panic
    println!("{}", map["color"]);

    //支持迭代器
    for i in &map {
        println!("{}->{}", i.0, i.1);
    }
    for i in map.iter() {
        println!("{:?}", i);
        println!("{:?}------>>>>>>>{:?}", i.0,i.1);
    }

    //移除
    map.remove("size");
    //支持迭代器
    for i in &map {
        println!("{}->{}", i.0, i.1);
    }
}

//当使用 insert 方法添加新的键值对的时候,如果已经存在相同的键,会直接覆盖对应的值
//如果你想"安全地插入",就是在确认当前不存在某个键时才执行的插入动作,
fn test_2() {
    println!("-------------------------test_2-------------------------");
    let mut map = HashMap::new();
    map.insert("color", "red");
    map.insert("size", "10 m^2");
    map.entry("color").or_insert("red"); //这句话的意思是如果没有键为 "color" 的键值对就添加它并设定值为 "red",否则将跳过。
}

//在已经确定有某个键的情况下如果想直接修改对应的值,有更快的办法:
fn test_3() {
    println!("-------------------------test_3-------------------------");
    let mut map = HashMap::new();
    map.insert("color", "red");

    if let Some(x) = map.get_mut(&"color2") {
        *x = "green";
    }

    if HashMap::contains_key(&map, "color2"){
        println!("contain key color");
    } else {
        println!("not contain key color2");
    }

    //这种直接赋值的方式则不可以
    //map["color"]="yello";

    for i in map.iter() {
        println!("{:?}", i);
    }
}

fn main() {
    test_1();
    test_2();
    test_3();
}

 

Guess you like

Origin blog.csdn.net/liujiayu2/article/details/114387142