【编程】Rust语言入门第5篇 复合类型——数组、结构体、元组、枚举

数组

Rust中有定长数组、变长数组,与两种字符串类似,前者在栈上,记为array,速度快,后者类型为Vector,在堆上,性能较低。

  • 声明
    Rust数组的声明比C形式较简,与Python形似。
let arr = [1,2,3,4,5];

为数组声明类型,

let a: [u8; 5] = [1,2,3,4,5];

声明重复元素的数组,

//重复5次的3
let a: [u8; 5] = [3; 5]
  • 遍历
    与Python相似,可用for <ele_var> in <arr>遍历数组,注意语法上的差异:
    Python
a = [1,2,3,4,5]
for i in a:
    print(i)

Rust

let a = [1,2,3,4,5];
for i in a {
   
    println!("{}",i);
}
  • 索引
    注意避免越界,
fn main() {
   
    let a = [9, 8, 7, 6, 5];
    let first = a[0]; // 获取a数组第一个元素
    let second = a[1]; // 获取第二个元素
}
  • 数组元素是非基本类型
    如要,
let array = [String::from("rust is good!"); 8];
println!("{:#?}", array);

由于基本类型在Rust中赋值是以Copy的形式,而复杂类型没有实现该方法,故报错。
改正,通过循环来声明实现Copy

let str_arr:[String;8] = std::array::from_fn(|_i| String::from("Good"));

结构体

  • 定义
    Rust中结构体定义语法与C略有差异,
    Rust的语法
struct Person {
   
    name: String,
    id: String,
}

C

struct Person{
   
    char name[30];
    char id[10];
};
  • 创建
    这与C&C++结构体初始化的语法很不同,
let auser = Person {
   
    name: String::from("Kirk"),
    id: String::from("001"),
};
  • 访问
    与C&C++相似。

利用#[derive(Debug)]打印结构体变量

#[derive(Debug)]
struct User {
   
    name: String,
    email: String,
    counts: i32,
} 

元组

C++、Python有相似的类型,

let at:(i32, f64, u8) = (300, 3.14, 0);
// 用`.`访问元组
let pi = at.1;

元组常用于函数返回值,

fn main() {
   
    let s1 = String::from("hello");
    let (s2, len) = calculate_length(s1);
    println!("The length of '{}' is {}.", s2, len);
}

fn calculate_length(s: String) -> (String, usize) {
   
    let length = s.len(); // len() 返回字符串的长度
    (s, length)
}

枚举

C++、Python有枚举类型
rust的语法,

enum PokerSuit {
   
  Clubs,
  Spades,
  Diamonds,
  Hearts,
}

与C++相似,枚举值也可以带有值,

enum PokerCard {
   
    Clubs(u8),
    Spades(u8),
    Diamonds(u8),
    Hearts(u8),
}

fn main() {
   
   let c1 = PokerCard::Spades(5);
   let c2 = PokerCard::Diamonds(13);
}

rust的枚举类型可以用任何类型做成员,太强大了。

enum Message {
   
    Quit,
    Move {
    x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
   
    let m1 = Message::Quit;
    let m2 = Message::Move{
   x:1,y:1};
    let m3 = Message::ChangeColor(255,255,0);
}

C语言中有null,指空值;而rust语言抛弃了null,改用Option枚举变量来表达,

fn plus_one(x: Option<i32>) -> Option<i32> {
   
    match x {
   
        None => None,
        Some(i) => Some(i + 1),
    }
}
let five = Some(5);
let six = plus_one(five);
let none = plus_one(None);

相关推荐

  1. C++复合数据类型结构|

    2024-02-21 01:28:01       53 阅读
  2. C# 语言类型(三)—数组/类型/结构

    2024-02-21 01:28:01       34 阅读
  3. C# 语言类型(三)—数组/类型/结构

    2024-02-21 01:28:01       33 阅读
  4. C# 语言类型(三)—数组/类型/结构

    2024-02-21 01:28:01       30 阅读
  5. 编程Rust语言门第4 字符串

    2024-02-21 01:28:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 01:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 01:28:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 01:28:01       82 阅读
  4. Python语言-面向对象

    2024-02-21 01:28:01       91 阅读

热门阅读

  1. qt中读写锁与互斥锁的区别

    2024-02-21 01:28:01       55 阅读
  2. 【C++】智能指针

    2024-02-21 01:28:01       50 阅读
  3. kmp算法

    kmp算法

    2024-02-21 01:28:01      48 阅读
  4. antd dependencies使用

    2024-02-21 01:28:01       53 阅读
  5. day3 2/20

    day3 2/20

    2024-02-21 01:28:01      44 阅读
  6. git----->git pull和git fetch区别

    2024-02-21 01:28:01       46 阅读
  7. vue3+ts实现表格的增删改查(一)

    2024-02-21 01:28:01       49 阅读
  8. 我的创作纪念日

    2024-02-21 01:28:01       53 阅读
  9. 前端开发框架推荐总结二

    2024-02-21 01:28:01       41 阅读