rust中的vec类型的部分使用


Vec 的作用

Vec<T> 是 Rust 标准库中的动态数组类型,具有以下特点:

  1. 动态大小:可以在运行时增长或缩小
  2. 连续存储:元素在内存中连续存放
  3. 类型安全:只能存储相同类型的元素
  4. 所有权管理:自动管理内存分配和释放

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 VecPython 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)

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - rust中的vec类型的部分使用


欢迎来到我的小屋