单页 网站 模板,信息流优化师简历,怎样自学做网站,北京手机网站建设公司文章目录 一、元组#xff08;tuple#xff09;1.元组定义2.元组使用解构索引 3.元组修改非可变元组可变元组类型不一致 二、数组1.数组不可变数组定义可变数组定义数组使用数组修改数组的遍历 2.动态数组-向量#xff08;Vector#xff09;向量定义向量遍历向量追加向量插… 文章目录 一、元组tuple1.元组定义2.元组使用解构索引 3.元组修改非可变元组可变元组类型不一致 二、数组1.数组不可变数组定义可变数组定义数组使用数组修改数组的遍历 2.动态数组-向量Vector向量定义向量遍历向量追加向量插入向量删除remove方法pop方法-删除最好一个元素truncate方法-缩减向量clear方法-清空向量drain方法-删除范围内向量 向量排序sort方法sort_by方法 逆转向量 Rust官方文档 针对集合Rust提供了两种复合数据类型元组和数组。 一、元组tuple 元组tuple是一种复合数据类型可以包含不同类型的元素但一旦定义元组长度不可变的。 1.元组定义
# 标准定义
fn main() {let tup: (i32, f64, u8, str) (500, 6.4, 1, hello);
}
# 也可省略类型
fn main() {let tup (500, 6.4, 1, hello);
}2.元组使用 Rust中使用元组数据有两种方法。 解构 即将一个元组拆成多个部分每个部分赋值给一个变量索引 即使用’.配合索引进行使用 解构
fn main() {let tup: (i32, f64, u8, str) (500, 6.4, 1, hello);let (a,b,c,d) tup;println!(a{0},b{1},c{2},d{3},a,b,c,d);
}
$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.34sRunning target/debug/hello hello
a500,b6.4,c1,dhello索引
fn main() {let tup: (i32, f64, u8, str) (500, 6.4, 1, hello);println!(a{0},b{1},c{2},d{3},tup.0,tup.1,tup.2,tup.3);
}
$argo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.31sRunning target/debug/hello hello
a500,b6.4,c1,dhello3.元组修改 理论上元组是不能进行修改的但是如果定义为可变元组则可以修改元组内容但修改值的类型必须和定义时一致。 特别注意元组长度始终无法修改
非可变元组 fn main() {let tup: (i32, f64, u8, str) (500, 6.4, 1, hello);println!(value:{},tup.0);tup.0 1000;println!(After:{},tup.0);
}$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)
error[E0594]: cannot assign to tup.0, as tup is not declared as mutable-- src/main.rs:4:5|
4 | tup.0 1000;| ^^^^^^^^^^^^ cannot assign|
help: consider changing this to be mutable|
2 | let mut tup: (i32, f64, u8, str) (500, 6.4, 1, hello);| For more information about this error, try rustc --explain E0594.
error: could not compile hello (bin hello) due to previous error可变元组
fn main() {let mut tup: (i32, f64, u8, str) (500, 6.4, 1, hello);println!(value:{},tup.0);tup.0 1000;println!(After:{},tup.0);
}
$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.22sRunning target/debug/hello hello
value:500
After:1000类型不一致
fn main() {let mut tup: (i32, f64, u8, str) (500, 6.4, 1, hello);println!(value:{},tup.0);tup.0 what?;println!(After:{},tup.0);
}
$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)
error[E0308]: mismatched types-- src/main.rs:4:13|
4 | tup.0 what?;| ----- ^^^^^^^ expected i32, found str| || expected due to the type of this bindingFor more information about this error, try rustc --explain E0308.
error: could not compile hello (bin hello) due to previous error二、数组 目前据我所知Rust中可以称为数组的有可变数组、不可变数组和向量. 数组只能是单一数据类型的合集比元组多了遍历的功能向量与数组一样是单一数据类型的合计但是比数组强大太多具有增、删、插入、排序等操作 1.数组
不可变数组定义
# 标准定义方法
fn main() {let a: [i32; 5] [1, 2, 3, 4, 5];
} a [1, 2, 3, 4, 5]
# 简化类型定义方法
fn main() {let a [1, 2, 3, 4, 5];
} a [1, 2, 3, 4, 5]
# 相同初始值定义方法
fn main() {let a [3; 5];
} a [3, 3, 3, 3, 3]可变数组定义 定义方法与不可变数组一致只是加了mut关键字 fn main() {let mut v: [i32; 5] [3;5];
} a [3, 3, 3, 3, 3]数组使用 可以利用数组名[下标]的方式对数组内容进行使用数组内下标从0计算。 fn main() { let array [1, 2, 3, 4, 5]; println!(Second value:{:?}, array[1]);
}$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.24sRunning target/debug/hello hello
Second value:2数组修改
fn main() { let mut array [1, 2, 3, 4, 5]; println!(value :{:?}, array); array[2] 100;println!(After :{:?}, array);
}$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.22sRunning target/debug/hello hello
value :[1, 2, 3, 4, 5]
After :[1, 2, 100, 4, 5]数组的遍历
# 值遍历
fn main() { let array [1, 2, 3, 4, 5]; for i in array{println!({},i);}
}$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.24sRunning target/debug/hello hello
1
2
3
4
5# 下标遍历
fn main() { let array [1, 2, 3, 4, 5]; for i in 0..5{println!({},array[i]);}
}$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.21sRunning target/debug/hello hello
1
2
3
4
52.动态数组-向量Vector Rust中的向量Vector是一种动态数组它可以存储相同类型的元素并且其大小可以在运行时增长或缩小。 向量定义
let mut v1 Vec::new(); // 创建一个空的向量
let v2 vec![1, 2, 3]; // 创建一个包含初始元素的向量向量遍历
fn main() { let v vec![1, 2, 3]; for i in v { println!({}, i); }
}向量追加 fn main() { let mut v Vec::new();v.push(1);v.push(2);v.push(3);println!({:?},v);
}$cargo run helloFinished dev [unoptimized debuginfo] target(s) in 0.00sRunning target/debug/hello hello
[1, 2, 3]向量插入
fn main() { let mut vec vec![1, 2, 4, 5]; vec.insert(2, 3); // 在索引2的位置插入元素3 println!({:?}, vec);
}$cargo run helloCompiling hello v0.1.0 (/home/kali/Desktop/ctf/script/RustPro/hello)Finished dev [unoptimized debuginfo] target(s) in 0.26sRunning target/debug/hello hello
[1, 2, 3, 4, 5]向量删除
remove方法
fn main() { let mut vec vec![1, 2, 3, 4, 5]; let removed_element vec.remove(2); // 删除索引2处的元素 println!(Removed element: {}, removed_element); // 输出: Removed element: 3 println!({:?}, vec); // 输出: [1, 2, 4, 5]
}pop方法-删除最好一个元素
fn main() { let mut vec vec![1, 2, 3];vec.pop();println!({:?}, vec); // 输出: [1, 2]
}truncate方法-缩减向量
fn main() { let mut vec vec![1, 2, 3, 4, 5]; vec.truncate(3); // 缩减向量的大小为3 println!({:?}, vec); // 输出: [1, 2, 3]
}clear方法-清空向量
fn main() { let mut vec vec![1, 2, 3, 4, 5]; vec.clear(); // 删除所有元素 println!({:?}, vec); // 输出: []
}drain方法-删除范围内向量
fn main() { let mut vec vec![1, 2, 3, 4, 5]; let drained: Vec_ vec.drain(1..3).collect(); // 删除索引1到2的元素不包括3并收集它们 println!(Drained elements: {:?}, drained); // 输出: Drained elements: [2, 3] println!({:?}, vec); // 输出: [1, 4, 5]
}向量排序
sort方法
fn main() { let mut numbers vec![5, 2, 9, 1, 5, 6]; numbers.sort(); println!({:?}, numbers); // 输出: [1, 2, 5, 5, 6, 9]
}sort_by方法
# 升序
fn main() { let mut numbers vec![5, 2, 9, 1, 5, 6]; numbers.sort_by(|a, b| a.cmp(b)); println!({:?}, numbers); // 输出: [1, 2, 5, 5, 6, 9]
}
# 降序
fn main() { let mut numbers vec![5, 2, 9, 1, 5, 6]; numbers.sort_by(|a, b| b.cmp(a)); println!({:?}, numbers); // 输出: [9, 6, 5, 5, 2, 1]
}逆转向量
fn main() { let mut numbers vec![1, 2, 3, 4, 5]; numbers.reverse(); println!({:?}, numbers); // 输出: [5, 4, 3, 2, 1]
}