Rust之字符串,元组,数组,切片,打印优化

[20190417]

fn main() {
    let t = (1, 'a', false);
    let f = (2, (1, 'a', false));
    println!("{} {} {}", t.0, t.1, t.2);
    println!("{}", f.1); // wrong
}

第二个会出错,因为是一个tuple{}有很多语法细节,比如改成:{:?}即可。

println!("{:?}", f.1); //(1, 'a', false)

因为没有匹配的display trait,匹配上即可。

println!("{:?}", f); // (2, (1, 'a', false))也可以。

下面这样会报错:

fn main() {
    let t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
    println!("{:?}", t);
}

如果tuple只是1到6则不会出错。

WHY???

数组的用法

fn main() {
    let xs: [i32; 5] = [4,5,6,7,8];
    println!("{}", xs[0]);
}

注意数组类型的标定方法:let xs: [i32; 5]第一个参数表示类型,第二个表示个数。

数组的长度,数组大小

fn main() {
    let xs: [i32; 5] = [4,5,6,7,8];
    println!("{} {} {}", xs[0], xs.len(), mem::size_of_val(&xs)); // 4 5 20
}

20B。

注意与内存相关的操作是用:mem包。

切片操作:

let ys = &xs[2..4];
println!("{:?}", ys);

字符串

fn main() {
	let s = "String"; // &str
	let ss = String::from("String!"); // std::string::String type

	println!("{}", s);
	println!("{}", ss[0]); // wrong
}

注意两种写法都不允许index.

转化为数组类型:

let s = "String".to_string(); 

数组切片

fn main() {
	let s = "String".to_string(); // ^str
	let ss = String::from("String!"); // std::string::String type

	let slice = &ss[0..4];
	println!("{}", slice); // Stri
}

字符串

字符串连接

fn main() {
	let h = String::from("hello, ");
	let w = String::from("world!");
	let s = h + &w;
	println!("{}", s);
}

注意,后面的要带&,前面的不用带。其他都是错误的情况。

如果是多个字符串拼接,后面的也一样是加上&符号:

fn main() {
	let h = String::from("hello, ");
	let w = String::from("world!");
	let v = String::from(" Here I am..");
	let s = h + &w + &v;
	println!("{}", s);
}

空tuple

fn main() {
	// empty tuple
	let t = ();
}

https://www.youtube.com/watch?v=yP8N3dd_Kd4&list=PLJbE2Yu2zumDF6BX6_RdPisRVHgzV02NW&index=2

2019.10 Update:

第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、

END.

你可能感兴趣的:(Rust学习笔记)