rust中的vec类型的部分使用 最后更新时间:2025年10月24日 ### Vec 的作用 `Vec` 是 Rust 标准库中的动态数组类型,具有以下特点: 1. **动态大小**:可以在运行时增长或缩小 2. **连续存储**:元素在内存中连续存放 3. **类型安全**:只能存储相同类型的元素 4. **所有权管理**:自动管理内存分配和释放 ### Vec 的基本用法 ```rust // 创建空的 Vec let mut vec: Vec = 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` 用于存储从数据库查询得到的所有配置项: ```rust let sys_configs: Vec = iter.filter_map(Result::ok).collect(); ``` 这行代码将数据库查询结果迭代器转换为 `Vec` 类型的向量。 ### Python 中的对应概念 Python 中与 Rust `Vec` 最相似的是 **list** 数据结构: ```python # 创建空列表 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 限制 | ### 实际应用示例 在代码中: ```rust let sys_configs: Vec = iter.filter_map(Result::ok).collect(); HttpResponse::Ok().json(sys_configs) ``` 对应的 Python 伪代码可能是: ```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