Vec 的作用
Vec<T> 是 Rust 标准库中的动态数组类型,具有以下特点:
- 动态大小:可以在运行时增长或缩小
- 连续存储:元素在内存中连续存放
- 类型安全:只能存储相同类型的元素
- 所有权管理:自动管理内存分配和释放
Vec 的基本用法
// 创建空的 Vec
let mut vec: Vec<i32> = Vec::new();
// 使用宏创建并初始化
let mut vec = vec![1, 2, 3];
// 添加元素
vec.push(4);
// 访问元素
let first = &vec[0]; // 不安全访问(可能越界)
let second = vec.get(1); // 安全访问(返回 Option)
// 遍历元素
for item in &vec {
println!("{}", item);
}
// 获取长度
let length = vec.len();代码中的应用
代码中,Vec<SysConfigResponse> 用于存储从数据库查询得到的所有配置项:
let sys_configs: Vec<SysConfigResponse> = iter.filter_map(Result::ok).collect();这行代码将数据库查询结果迭代器转换为 Vec<SysConfigResponse> 类型的向量。
Python 中的对应概念
Python 中与 Rust Vec<T> 最相似的是 list 数据结构:
# 创建空列表
my_list = []
# 创建并初始化列表
my_list = [1, 2, 3]
# 添加元素
my_list.append(4)
# 访问元素
first = my_list[0] # 直接访问(可能引发 IndexError)
first = my_list.get(0) # Python 列表没有 get 方法,但 dict 有
# 安全访问(类似 Rust 的 get 方法)
def safe_get(lst, index):
try:
return lst[index]
except IndexError:
return None
first = safe_get(my_list, 0)
# 遍历元素
for item in my_list:
print(item)
# 获取长度
length = len(my_list)
# 列表推导式(类似 Rust 的 collect 和 filter_map)
numbers = [1, 2, 3, 4, 5]
squared_evens = [x**2 for x in numbers if x % 2 == 0] # [4, 16]Rust 与 Python 的主要区别
| 特性 | Rust Vec | Python List |
|---|---|---|
| 类型安全 | 编译时检查 | 运行时动态类型 |
| 内存管理 | 所有权系统 | 垃圾回收 |
| 性能 | 零成本抽象 | 解释执行,相对较慢 |
| 错误处理 | Option/Result | 异常机制 |
| 并发安全 | 严格的借用检查 | GIL 限制 |
实际应用示例
在代码中:
let sys_configs: Vec<SysConfigResponse> = iter.filter_map(Result::ok).collect();
HttpResponse::Ok().json(sys_configs)对应的 Python 伪代码可能是:
sys_configs = []
for result in database_results:
if result.is_ok(): # Python 中通常用异常处理
sys_configs.append(result.unwrap())
return json_response(sys_configs) 

Comments | NOTHING