如何在Rust的for循环中根据变量值动态创建对应名称的Vec?
Rust是静态编译语言,变量名需在编译期确定,无法在运行时动态生成vec_0、vec_1这类带序号后缀的变量名,你可以用以下三种常用方案替代:
- 方案1:嵌套Vec(适合运行时才知道Vec数量的场景)
把所有生成的Vec存到一个外层的Vec里,用索引访问对应位置的子Vec,实现效果和动态命名的变量完全一致:
// 生成2个容量为100的i32类型Vec,存入外层集合 let mut vecs: Vec<Vec<i32>> = (0..2) .map(|_| Vec::with_capacity(100)) .collect(); // 索引0对应原本的vec_0,索引1对应原本的vec_1 vecs[0].push(10); vecs[1].push(20);
- 方案2:固定长度数组(适合编译期就确定Vec数量的场景)
如果你需要的Vec数量是固定的、写代码时就可以确认,可以直接用数组解构拿到独立的变量:
// 直接生成2个独立的Vec变量 let [vec_0, vec_1]: [Vec<i32>; 2] = [(); 2].map(|_| Vec::with_capacity(100));
- 方案3:HashMap存储(适合需要用自定义名称区分Vec的场景)
如果你不想用数字索引,也可以用HashMap给每个Vec设置自定义标识:
use std::collections::HashMap; let mut vec_map: HashMap<String, Vec<i32>> = (0..2) .map(|i| (format!("vec_{i}"), Vec::with_capacity(100))) .collect(); // 通过名称获取对应的Vec vec_map.get_mut("vec_0").unwrap().push(10);
内容的提问来源于stack exchange,提问作者daniellga
相关产品推荐
相关产品推荐

