Appearance
元组与数组
元组
小括号里,值用逗号分开。每个位置对应一个类型,各元素类型可以不同。
rust
let tup: (i32, f64, u8) = (500, 6.4, 1);
println!("{},{},{}", tup.0, tup.1, tup.2);
// 解构的方式赋值
let (x,y,z) = tup;
println!("{},{},{}", x, y, z);数组
跟元组类似,但是元素类型相同,长度固定。
想让数据存放在stack上而不是heap上时用数组更好。
rust
let arr = [1,2,3,4,5];
// 声明类型的方式: [类型;长度]
let a:[i32; 5] = [1,2,3,4,5];
// 每个元素都相同时可以这样赋值
let a = [3:5]; // 相当于let a = [3,3,3,3,3];
// 访问时用下标
println!(a[2]);
// 如果越界,编译会通过,运行会报错假设您需要申请特别大的数组,那么可以如下书写:
rust
fn main(){
// 适用于数组内都是相同值的情况。
let my_arr: [u32; 32 * 1024] = [0; 32 * 1024];
println!("{}",my_arr[1023]);
}想修改数组的话,需要加上mut关键字。
rust
fn main(){
let mut my_arr: [i32;4] = [1,2,3,4];
my_arr[0] = 100;
println!("{}",my_arr[0]);
}如果需要存放不定长的数据,使用Vector(由标准库提供)是更好的选择。
切片
从一段数据中(例如,数组),裁切一段下来。
rust
// 字符串切片
let s = String::from ("helloworld");
let head = &s[0..5];
let tail = &s[5..s.len()];
println!("{}", head);
println!("{}", tail);
println!("{} {}", head, tail)
// ..可以用来表示范围。
// ..y 等价于0..y
// x.. 等价于x到数据结束
// .. 等价于0到数据结束非字符串切片
rust
let arr = [1,2,3,4,5];
let part = &arr[0..2];
for i in part.iter() {
println!("{}", i);
}