Rust数据结构与模块系统入门
立即解锁
发布时间: 2025-09-04 01:52:02 阅读量: 17 订阅数: 25 AIGC 


Rust编程核心概念精讲
### Rust 数据结构与模块系统入门
#### 1. 字符串操作
在 Rust 中,字符串内部是一个字节向量,并且采用 UTF - 8 编码,这意味着字符串中的每个字符可能占用 1 到 4 个字节。
**1.1 访问字符串的字节和字符**
由于字符占用字节数不同,直接使用索引访问字节或字符可能会导致问题。例如,若第一个字符由 2 个字节组成,访问索引为 0 的字节,该字节本身并不代表任何字符。因此,Rust 不允许使用索引访问字节或字符,示例代码如下:
```rust
fn main() {
let s1 = String::from("hello");
let s2 = String::from("Привет");
let len1 = s1.len();
let len2 = s2.len();
println!("len1 = {}, len2 = {}", len1, len2);
}
```
在上述代码中,`s1` 每个字符占 1 个字节,长度为 5;`s2` 每个字符占 2 个字节。若尝试使用索引访问字符串,如 `println!("{}", s1[0]);`,代码将无法编译。
**1.2 字符串切片**
可以使用切片来访问字符串的部分内容,前提是切片的起始和结束索引是有效的字符边界。例如:
```rust
fn main() {
let s1 = String::from("hello");
let s2 = String::from("Привет");
println!("{:?}", &s1[0..1]);
println!("{:?}", &s2[0..4]);
}
```
若尝试使用无效的切片索引,如 `&s2[0..3]`,程序将在运行时崩溃。
**1.3 查看字符串的字符和字节**
可以使用 `chars` 和 `bytes` 方法查看字符串中的所有字符和字节,示例代码如下:
```rust
fn main() {
let s1 = String::from("hello");
let s2 = String::from("Привет");
println!("{:?}", s1.chars());
println!("{:?}", s1.bytes());
println!("{:?}", s2.chars());
println!("{:?}", s2.bytes());
}
```
#### 2. 哈希映射(Hash Map)
哈希映射 `HashMap<K, V>` 是一种存储键值对的集合,通过键来访问值。每个键唯一对应一个值,Rust 使用哈希函数来存储键值对,以便快速定位。
**2.1 创建哈希映射**
使用 `new` 函数创建哈希映射,使用 `insert` 方法插入元素。若插入已存在的键并赋予不同的值,旧值将被覆盖,示例代码如下:
```rust
use std::collections::HashMap;
fn main() {
let mut currencies = HashMap::new();
currencies.insert("India", "Rupees");
currencies.insert("United States", "USD");
currencies.insert("United Kingdom", "GBP");
currencies.insert("India", "INR");
println!("{:?}", currencies);
}
```
从输出可以看出,哈希映射的元素打印顺序与插入顺序可能不同。
**2.2 访问哈希映射中的值**
使用 `get` 方法通过键访问值,该方法返回 `Option<&V>` 枚举。若键存在,返回 `Some`;否则返回 `None`,示例代码如下:
```rust
use std::collections::HashMap;
fn main() {
let mut currencies = HashMap::new();
currencies.insert("India", "INR");
currencies.insert("United States", "USD");
currencies.insert("United Kingdom", "GBP");
let currency_usa = currencies.get("United States");
let currency_china = currencies.get("China");
println!("Currency of USA is: {:?}", currency_usa);
println!("Currency of China is: {:?}", currency_china);
}
```
**2.3 遍历哈希映射**
可以使用 `for` 循环遍历哈希映射的所有键值对,示例代码如下:
```rust
use std::collections::HashMap;
fn main() {
let mut currencies = HashMap::new();
currencies.insert("India", "INR");
currencies.insert("United States", "USD");
currencies.insert("United Kingdom", "GBP");
for (key, value) in ¤cies {
println!("{} : {}", key, value);
}
}
```
**2.4 删除哈希映射中的值**
使用 `remove` 方法删除哈希映射中的键值对,示例代码如下:
```rust
use std::collections::HashMap;
fn main() {
let mut currencies = HashMap::new();
currencies.insert("India", "INR");
```
0
0
复制全文
相关推荐










