跟着谷歌学习Rust:第四课-复合类型

99 阅读2分钟

字符串

fn main() {
    let greeting: &str = "Greetings";
    let planet: &str = "🪐";
    let mut sentence = String::new();
    sentence.push_str(greeting);
    sentence.push_str(", ");
    sentence.push_str(planet);
    println!("final sentence: {}", sentence);
    println!("{:?}", &sentence[0..5]);
    //println!("{:?}", &sentence[12..13]);
}

Rust中初始化字符串的方式有两种: 第一种是通过双引号""的方式,该方式创建的字符串是不可变的,并且只读不能修改。 第二种是通过String::new的方式创建,该方式创建的字符串可以修改。

元组

fn main() {
    //定义元组:元组两个属性一个属性为i8,另一个属性bool。并且后续跟的值要完全按照此顺序
    let t: (i8, bool) = (7, true);
    println!("t.0: {}", t.0);
    println!("t.1: {}", t.1);
}

对于元组的理解,我更习惯理解为不需要定义结构体的对象。

实际开发过程中可能需要一个中间对象做转换,但是又不想创建一个对象处理,这时候可以使用元组,只要指定类型,无需定义属性名即可使用。

数组

array

fn main() {
    //定义数组:数组类型为i8,长度为10。后续的值为42
    let mut a: [i8; 10] = [42; 10];
    a[5] = 0;
    println!("a: {a:?}");
    
    //定义一个确定值的数组
    let arrs = [1,2,3,4];
    //遍历数组
    for arr in arrs {
        println!("遍历的值{}",arr);
    }
}

Rust的Array跟Java语言的数组定义类似,都是通过[]定义的,因此也可以理解Array是固定大小的。

Rust的Array的特性:

  • 固定大小
  • 存储在栈上(重要)

vector

fn main() {
    //初始化一个vector
    let v: Vec<i32> = Vec::new();
    
    //通过索引获取元素
    let v = vec![1, 2, 3, 4, 5]; 
    let third: &i32 = &v[2];
    
    //通过get的方式获取元素
    let v = vec![1, 2, 3, 4, 5];
    let does_not_exist = v.get(100);
}

Vector的特性:

  • 动态数组不固定大小
  • 存储在堆上

使用方式:

  • 通过索引的方式获取元素(会出现数组下标越界)
  • 通过get的方式获取元素(不会出现数组下标越界)

HashMap


fn main() {
    //初始化map
    let mut map_data:HashMap<&str, i32> = HashMap::new();
    //map中设置值
    map_data.insert("k", 23);
    println!("map_data:{}",map_data.get("k").unwrap());
}

Rust的map和Java中的map初始化的方式差不多,但是设置值有一定的不通,Java中使用put,而Rust使用insert。

参考

google.github.io/comprehensi… google.github.io/comprehensi…