第6篇:数据容器——管理大量数据 Rust中文编程

第6篇:数据容器------管理大量数据

作者: 李金雨
联系方式: wbtm2718@qq.com
目标读者: Rust中文编程
核心理念: AI时代必须使用中文编程,母语编程阅读效率极高


1. 开篇引入

本课目标

  • 掌握固定数据盒(数组)的使用
  • 掌握可增数据盒(向量)的使用
  • 掌握元组的使用
  • 理解不同数据容器的特点和用途

生活场景引入

想象一下,你有一个抽屉,里面有很多不同类型的盒子:

  • 一个固定大小的盒子,用来放铅笔,只能放5支
  • 一个可以伸缩的盒子,用来放橡皮,可以放很多
  • 一个特殊的盒子,用来放不同类型的东西,比如一支铅笔、一块橡皮和一把尺子

在编程中,我们也有类似的容器来管理大量数据,它们就是数组、向量和元组。

预期成果展示

通过这节课的学习,你将能够:

  • 创建和使用固定大小的数组
  • 创建和使用可伸缩的向量
  • 创建和使用元组
  • 根据不同的需求选择合适的数据容器
  • 编写能够管理大量数据的程序

2. 概念讲解

固定数据盒(数组)

数组就像一个固定大小的盒子,一旦创建,大小就不能改变。

rust 复制代码
fn main() {
    // 创建一个包含5个整数的数组
    let 数字们 = [1, 2, 3, 4, 5];

    // 创建一个包含3个字符串的数组
    let 名字们 = ["张三", "李四", "王五"];

    // 创建一个包含10个0的数组
    let 零们 = [0; 10];
}

访问数组元素:

rust 复制代码
fn main() {
    let 数字们 = [1, 2, 3, 4, 5];

    // 访问第一个元素(索引从0开始)
    let 第一个 = 数字们[0];
    println!("第一个元素:{}", 第一个);

    // 访问第三个元素
    let 第三个 = 数字们[2];
    println!("第三个元素:{}", 第三个);
}

修改数组元素(需要使用mut):

rust 复制代码
fn main() {
    let mut 数字们 = [1, 2, 3, 4, 5];

    // 修改第二个元素
    数字们[1] = 10;
    println!("修改后的数组:{:?}", 数字们);
}

可增数据盒(向量)

向量就像一个可以伸缩的盒子,可以根据需要添加或删除元素。

rust 复制代码
fn main() {
    // 创建一个空向量
    let mut 数字们 = Vec::new();

    // 创建一个包含初始值的向量
    let mut 名字们 = vec!["张三", "李四", "王五"];
}

添加元素:

rust 复制代码
fn main() {
    let mut 数字们 = Vec::new();

    // 添加元素
    数字们.push(1);
    数字们.push(2);
    数字们.push(3);
    println!("向量内容:{:?}", 数字们);
}

删除元素:

rust 复制代码
fn main() {
    let mut 数字们 = vec![1, 2, 3, 4, 5];

    // 移除最后一个元素
    数字们.pop();
    println!("移除最后一个元素后:{:?}", 数字们);

    // 移除指定位置的元素
    数字们.remove(0);
    println!("移除第一个元素后:{:?}", 数字们);
}

访问元素:

rust 复制代码
fn main() {
    let 数字们 = vec![1, 2, 3, 4, 5];

    // 访问第一个元素
    let 第一个 = 数字们[0];
    println!("第一个元素:{}", 第一个);

    // 使用get方法访问元素(更安全)
    if let Some(第三个) = 数字们.get(2) {
        println!("第三个元素:{}", 第三个);
    }
}

向量的方法:

rust 复制代码
fn main() {
    let mut 数字们 = vec![1, 2, 3, 4, 5];

    // 获取长度
    println!("长度:{}", 数字们.len());

    // 检查是否为空
    println!("是否为空:{}", 数字们.is_empty());

    // 清空向量
    数字们.clear();
    println!("清空后:{:?}", 数字们);
}

元组(Tuple)

元组就像一个特殊的盒子,可以放不同类型的东西。

rust 复制代码
fn main() {
    // 创建一个元组
    let 个人信息 = ("张三", 15, 1.75);

    // 创建一个包含不同类型的元组
    let 混合 = (1, "你好", true, 3.14);
}

访问元组元素:

rust 复制代码
fn main() {
    let 个人信息 = ("张三", 15, 1.75);

    // 通过索引访问
    let 姓名 = 个人信息.0;
    let 年龄 = 个人信息.1;
    let 身高 = 个人信息.2;

    println!("姓名:{}", 姓名);
    println!("年龄:{}岁", 年龄);
    println!("身高:{}米", 身高);
}

元组的用途:

  • 函数返回多个值
  • 临时组合不同类型的数据
  • 作为函数参数传递多个值
rust 复制代码
fn main() {
    // 函数返回多个值
    fn 计算(a: i32, b: i32) -> (i32, i32, i32) {
        (a + b, a - b, a * b)
    }

    let (和, 差, 积) = 计算(5, 3);
    println!("和:{},差:{},积:{}", 和, 差, 积);
}

3. 动手实践

基础练习(必做)

  1. 班级成绩管理系统 :创建一个程序,使用数组存储班级成绩:

    rust 复制代码
    fn main() {
        let 成绩们 = [95, 88, 92, 76, 85];
        let mut 总分 = 0;
        
        println!("班级成绩:");
        for (索引, 成绩) in 成绩们.iter().enumerate() {
            println!("第{}名:{}分", 索引 + 1, 成绩);
            总分 += 成绩;
        }
        
        let 平均分 = 总分 as f64 / 成绩们.len() as f64;
        println!("总分:{}分", 总分);
        println!("平均分:{}分", 平均分);
    }
  2. 简易通讯录 :创建一个程序,使用向量存储联系人信息:

    rust 复制代码
    fn main() {
        let mut 联系人 = vec![
            ("张三", "13812345678"),
            ("李四", "13987654321"),
            ("王五", "13712345678")
        ];
        
        println!("通讯录:");
        for (姓名, 电话) in &联系人 {
            println!("{}:{}", 姓名, 电话);
        }
        
        // 添加新联系人
        联系人.push(("赵六", "13612345678"));
        println!("\n添加新联系人后:");
        for (姓名, 电话) in &联系人 {
            println!("{}:{}", 姓名, 电话);
        }
    }
  3. 购物车程序 :创建一个程序,使用向量管理购物车:

    rust 复制代码
    fn main() {
        let mut 购物车 = vec![
            ("苹果", 5.5),
            ("香蕉", 3.0),
            ("橙子", 4.5)
        ];
        
        println!("购物车:");
        let mut 总价 = 0.0;
        for (商品, 价格) in &购物车 {
            println!("{}:{}元", 商品, 价格);
            总价 += 价格;
        }
        println!("总价:{}元", 总价);
        
        // 添加商品
        购物车.push(("梨", 4.0));
        println!("\n添加梨后:");
        总价 = 0.0;
        for (商品, 价格) in &购物车 {
            println!("{}:{}元", 商品, 价格);
            总价 += 价格;
        }
        println!("总价:{}元", 总价);
    }

进阶练习(选做)

  1. 单词本程序 :创建一个程序,使用向量存储单词和释义:

    rust 复制代码
    fn main() {
        let mut 单词本 = vec![
            ("apple", "苹果"),
            ("banana", "香蕉"),
            ("orange", "橙子")
        ];
        
        println!("单词本:");
        for (单词, 释义) in &单词本 {
            println!("{}:{}", 单词, 释义);
        }
        
        // 添加新单词
        单词本.push(("pear", "梨"));
        println!("\n添加新单词后:");
        for (单词, 释义) in &单词本 {
            println!("{}:{}", 单词, 释义);
        }
    }
  2. 坐标管理 :创建一个程序,使用元组存储坐标:

    rust 复制代码
    fn main() {
        let 点一 = (1, 2);
        let 点二 = (3, 4);
        
        println!("点一:({}, {})

学习交流

如果你在学习过程中遇到任何问题,欢迎联系我:

  • ** 视频号,"时空系"
  • 邮箱: wbtm2718@qq.com
  • 其他提示:
  • 本人正在开发纯中文编程语言和编译器,有兴趣的可以交流
  • 本人正在写一本基于中国母语思维习惯的数学教材,可以让你一年内学完从初中到研究生的数学,而且可以让你快速掌握人工智能的关键数学知识,有兴趣的可以交流

祝你学习愉快!

相关推荐
eLIN TECE1 小时前
Go基础之环境搭建
开发语言·后端·golang
念何架构之路1 小时前
Go反射应用技巧
开发语言·后端·golang
shjita1 小时前
java根据键值对中值的大小进行排序的手法。
java·开发语言·servlet
司南-70492 小时前
Dense结构下的 大模型系统架构研究
服务器·人工智能·后端
GISer_Jing2 小时前
AI全栈转型_TS后端学习路线
前端·人工智能·后端·学习
Rabitebla2 小时前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
时空系2 小时前
第7篇:功能——打造你的工具箱 Rust中文编程
开发语言·网络·rust
薪火铺子2 小时前
Spring Security 6.x 实战指南
java·后端·spring
全栈小刘2 小时前
Claude Code 为什么这么顺?Anthropic 最新复盘:真正撑住它的不是模型,而是缓存
后端