vector
- vector 允许存储多个值,在内存中顺序排列值。
- 使用
Vec::new
新建一个空的 vector。
|
|
- vector 是泛型实现的,可以存储任何类型的值。
- 使用
vec!
宏创建 vector:
|
|
- 丢弃 vector 时也会丢弃其所有元素。
- 读取 vector 的元素:
|
|
- 使用 vector 引用获取其元素时不能更新元素。
|
|
遍历 vector 元素
|
|
- 使用枚举来存储多种类型:
|
|
字符串
- String 和字符串 slice 都是 UTF-8 编码的。
新建字符串
|
|
更新字符串
- push_str 更新字符串到字符串。
- push 更新一个字符到字符串。
|
|
拼接字符串
- 使用 + 运算符或 format! 宏拼接字符串。
|
|
+
运算符使用了类似fn add(self, s: &str) -> String {}
的函数签名。- 只能将 &str 和 String 相加,不能将两个 String 值相加。
- 当需要连接很多个字符串的时候应该使用
format!
宏:
|
|
索引字符串
- rust 不支持索引访问:
|
|
- 因为
UTF-8
编码长度的不确定性,rust
索引不确保可以返回预期的字符,所以rust
直接不支持字符串索引的访问。 - 还有一个
Rust
不允许使用索引获取String
字符的原因是,索引操作预期总是需要常数时间(O(1))
。但是对于String
不可能保证这样的性能,因为Rust
必须从开头到索引位置遍历来确定有多少有效的字符。
字符串 slice
|
|
遍历字符串的方法
- 使用 chars 可以单独操作 Unicode 标量值. bytes 返回一个原始字节。
|
|
HashMap
- 哈希 map 可以用于需要任何类型作为键来寻找数据的情况,而不是像 vector 那样通过索引。
新建 hashMap
|
|
- 所有的键必须是相同类型,值也必须都是相同类型。
- 使用
collect
创建 HashMap:
|
|
哈希 map 和所有权
- 对于像 i32 这样的实现了 Copy trait 的类型,其值可以拷贝进哈希 map。
- 对于像 String 这样拥有所有权的值,其值将被移动而哈希 map 会成为这些值的所有者。
|
|
访问哈希 map 中的值
|
|
更新 HashMap
- 当对一个已存在的 key 执行 insert 操作时,key
- 使用 entry 在 key 不存在时新建这个 k-v 。
|
|