第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. 动手实践
基础练习(必做)
-
班级成绩管理系统 :创建一个程序,使用数组存储班级成绩:
rustfn 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!("平均分:{}分", 平均分); } -
简易通讯录 :创建一个程序,使用向量存储联系人信息:
rustfn main() { let mut 联系人 = vec![ ("张三", "13812345678"), ("李四", "13987654321"), ("王五", "13712345678") ]; println!("通讯录:"); for (姓名, 电话) in &联系人 { println!("{}:{}", 姓名, 电话); } // 添加新联系人 联系人.push(("赵六", "13612345678")); println!("\n添加新联系人后:"); for (姓名, 电话) in &联系人 { println!("{}:{}", 姓名, 电话); } } -
购物车程序 :创建一个程序,使用向量管理购物车:
rustfn 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!("总价:{}元", 总价); }
进阶练习(选做)
-
单词本程序 :创建一个程序,使用向量存储单词和释义:
rustfn main() { let mut 单词本 = vec![ ("apple", "苹果"), ("banana", "香蕉"), ("orange", "橙子") ]; println!("单词本:"); for (单词, 释义) in &单词本 { println!("{}:{}", 单词, 释义); } // 添加新单词 单词本.push(("pear", "梨")); println!("\n添加新单词后:"); for (单词, 释义) in &单词本 { println!("{}:{}", 单词, 释义); } } -
坐标管理 :创建一个程序,使用元组存储坐标:
rustfn main() { let 点一 = (1, 2); let 点二 = (3, 4); println!("点一:({}, {})
学习交流
如果你在学习过程中遇到任何问题,欢迎联系我:
- ** 视频号,"时空系"
- 邮箱: wbtm2718@qq.com
- 其他提示:
- 本人正在开发纯中文编程语言和编译器,有兴趣的可以交流
- 本人正在写一本基于中国母语思维习惯的数学教材,可以让你一年内学完从初中到研究生的数学,而且可以让你快速掌握人工智能的关键数学知识,有兴趣的可以交流
祝你学习愉快!