自学内容网 自学内容网

Rust HashMap使用

 Rust 的 HashMap 是一个功能强大的数据结构,它结合了哈希表的高效性和 Rust 编程语言的内存安全特性。通过提供常数时间复杂度的查找、插入和删除操作,以及丰富的 API,它在许多实际应用中都非常有用。

示例代码:

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    // 重复插入会直接被后者覆盖
    map.insert(String::from("Tom"), String::from("11111"));
    map.insert(String::from("Tom"), String::from("cat"));
    map.insert(String::from("Sam"), String::from("cat"));
    map.insert(String::from("David"), String::from("cat"));
    map.insert(String::from("John"), String::from("cat"));

    // 删除单个元素
    let del = map.remove(&String::from("David")).unwrap();
    println!("del={:?}", del);

    // 存在则修改,不存在则插入
    map.entry("Tom".to_string())
        .and_modify(|v| {
            v.push_str(" and mouse");
        })
        .or_insert("cat".to_string());

    // 不存在则插入
    map.entry("Sam".to_string()).or_insert(String::from("cat"));

    // 获取单个元素
    let m1 = &map["Tom"];
    println!("m1={:?}", m1);
    println!("Tom={:?}", map.get(&String::from("Tom")).clone().unwrap());
    println!("map={:?},is_empty={}", map, map.is_empty());

    // 清空
    map.clear();
    println!("map={:?},is_empty={}", map, map.is_empty());

    // 元祖vec转map
    let vec = vec![("key1", "value2"), ("key2", "value2")];
    let map: HashMap<&str, &str> = vec.into_iter().collect();
    println!("map={:?}", map);

    // 合并两个vec成map
    let keys = vec![String::from("blue"), String::from("red")];
    let v1 = vec![1, 2];
    let m1: HashMap<_, _> = keys.iter().zip(v1.iter()).collect();
    for i in m1.iter() {
        println!("{:?}", i);
    }
    for (k, v) in m1.iter() {
        println!("{},{}", k, v);
    }

    // 基于原有的key值进行更新,统计单词个数
    let text = "hello world wonderful world hello rust";
    let mut map = HashMap::new();
    for word in text.split_whitespace() {
        let count = map.entry(word).or_insert(0);
        *count += 1;
    }
    println!("{:?}", map);

    // 以vec形式统计每个字母出现位置
    let mut map = HashMap::new();
    for (i, c) in "hello!".chars().enumerate() {
        map.entry(c).or_insert(Vec::new()).push(i);
    }
    // 累加l出现的位置坐标
    let mut sum = 0;
    for i in map.get(&'l').unwrap() {
        sum += i;
    }
    println!("sum={sum},map={map:?}");
}


原文地址:https://blog.csdn.net/qq_35496811/article/details/144359955

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!