«

Rust - 集合

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


1、集合(Vector\String\HashMap)

1.1、使用Vector存储多个值

1.2、创建Vector

let number : Vec<i32> = Vec::new();
let v = vec![1,2,3];

1.3、更新Vector

let mut number  = Vec::new();
    number.push(1);
    number.push(2);

1.4、删除Vector

1.5、读取Vector的元素

    let v = vec![1,2,3];
    // 读取里面的值 引用
    let third :&i32 = &v[2];
    println!("读取的值为{}",third);

    // Get方法
    match v.get(2) {
        Some(third)=>println!("值为{}",third),
        None => println!("no value"),
    }

1.6、遍历Vector里的值

    let v = vec![1,2,3];

    // for循环遍历
    for i in &v{
        println!("{}",i);
    }

1.7、String字符串

1.8、创建一个新的字符串


fn main() {
    // 通过String::New创建字符串
    let mut s_test = String::new();

    // 方法二
    // to_string
    let data = "hello,world";
    let s = data.to_string();
    let s1 = "New Hello World".to_string();

    //String::from
    let s = String::from("From Hello world");
}

1.9、更新String


fn main() {
    // 通过String::New创建字符串
    let mut s_test = String::new();

    // 方法二
    // to_string
    let data = "hello,world";
    let s = data.to_string();
    let s1 = "New Hello World".to_string();

    //String::from
    let mut s = String::from("From Hello world");
    // pust_str方法
    s.push_str("in world");
    println!("{}",s);
    // pust方法
    s.push('!');

    // + 拼接字符串
    let s2 = String::from("Hello");
    let s3 = String::from("world");
    // s2 就不能使用了,s3因为是调用的引用,所有s3还保留
    let s4 = s2 + &s3;

    // format!宏拼接字符串
    let s5 = format!("{}-{}",s3,s4);
}

1.10、对String类型按索引的形式进行访问

1.11、HashMap

1.12、创建HashMap

use std::collections::HashMap;

fn main() {
    // 如果不指定类型会报错
    // 要么在定义时指定类型
    // let mut hash_test:HashMap<String,i32> = HashMap::new();
    let mut hash_test = HashMap::new();
    // 手动添加数据
    hash_test.insert("name", "小明");
    // 后面添加的类型必须相同
    //hash_test.insert(123, 123);

}

1.13、另一种创建HashMap方法:collect方法

use std::collections::HashMap;

fn main() {
    let teams = vec![String::from("Blue"),String::from("yellow")];
    let intial_scores = vec![10,30];
    let scores : HashMap<_,_> =teams.iter().zip(intial_scores.iter()).collect();
}

1.14、HashMap的所有权

1.15、访问HashMap的值

use std::collections::HashMap;

fn main() {
    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);

    match score {
        Some(s) => println!("{}",s),
        None => println!("no exit"),
    };
}

1.16、遍历HashMap

use std::collections::HashMap;

fn main() {
    let mut scores =HashMap::new();
    scores.insert(String::from("blue"), 10);
    scores.insert(String::from("yellow"), 50);

    // 调用的是引用
    for (k,v) in &scores  {
        println!("{},{}",k,v);
    }
}

1.17、更新HashMap

use std::collections::HashMap;

fn main() {
    let mut scores =HashMap::new();
    scores.insert(String::from("blue"), 10);
    scores.insert(String::from("yellow"), 50);

    // 替换现有的V,插入的K名称相同,那个原来的值会被替代
    scores.insert(String::from("blue"), 70);
    println!("{:?}",scores);

    // 检查K是否存在,使用entry方法,该方法会判断K中是否存在V,
    // 如果不存在通过or_insert方法插入值
    scores.entry(String::from("blue")).or_insert(90);
    scores.entry(String::from("write")).or_insert(888);
    println!("{:?}",scores);
}

1.18、Hash函数

rust语言学习

推荐阅读: