字符串
fn main() {
let greeting: &str = "Greetings";
let planet: &str = "🪐";
let mut sentence = String::new();
sentence.push_str(greeting);
sentence.push_str(", ");
sentence.push_str(planet);
println!("final sentence: {}", sentence);
println!("{:?}", &sentence[0..5]);
//println!("{:?}", &sentence[12..13]);
}
Rust中初始化字符串的方式有两种: 第一种是通过双引号""的方式,该方式创建的字符串是不可变的,并且只读不能修改。 第二种是通过String::new的方式创建,该方式创建的字符串可以修改。
元组
fn main() {
//定义元组:元组两个属性一个属性为i8,另一个属性bool。并且后续跟的值要完全按照此顺序
let t: (i8, bool) = (7, true);
println!("t.0: {}", t.0);
println!("t.1: {}", t.1);
}
对于元组的理解,我更习惯理解为不需要定义结构体的对象。
实际开发过程中可能需要一个中间对象做转换,但是又不想创建一个对象处理,这时候可以使用元组,只要指定类型,无需定义属性名即可使用。
数组
array
fn main() {
//定义数组:数组类型为i8,长度为10。后续的值为42
let mut a: [i8; 10] = [42; 10];
a[5] = 0;
println!("a: {a:?}");
//定义一个确定值的数组
let arrs = [1,2,3,4];
//遍历数组
for arr in arrs {
println!("遍历的值{}",arr);
}
}
Rust的Array跟Java语言的数组定义类似,都是通过[]定义的,因此也可以理解Array是固定大小的。
Rust的Array的特性:
- 固定大小
- 存储在栈上(重要)
vector
fn main() {
//初始化一个vector
let v: Vec<i32> = Vec::new();
//通过索引获取元素
let v = vec![1, 2, 3, 4, 5];
let third: &i32 = &v[2];
//通过get的方式获取元素
let v = vec![1, 2, 3, 4, 5];
let does_not_exist = v.get(100);
}
Vector的特性:
- 动态数组不固定大小
- 存储在堆上
使用方式:
- 通过索引的方式获取元素(会出现数组下标越界)
- 通过get的方式获取元素(不会出现数组下标越界)
HashMap
fn main() {
//初始化map
let mut map_data:HashMap<&str, i32> = HashMap::new();
//map中设置值
map_data.insert("k", 23);
println!("map_data:{}",map_data.get("k").unwrap());
}
Rust的map和Java中的map初始化的方式差不多,但是设置值有一定的不通,Java中使用put,而Rust使用insert。