You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中Vec是否存在可填充缺失索引默认值的insert方法?

Rust Vec 填充默认值并设置指定索引值的方法

Rust标准库的Vec没有直接提供这样的单一方法,但可以通过组合现有方法轻松实现需求:先将Vec的长度扩展到目标索引+1(不足的位置用类型的默认值填充),再设置指定索引的值。

基础实现示例

let mut vec: Vec<i32> = Vec::new();
let target_index = 3;
let value = 12;

// 扩展Vec长度到目标索引+1,缺失部分用默认值填充
vec.resize(target_index + 1, Default::default());
// 设置指定索引的值
vec[target_index] = value;

assert_eq!(vec[..], [0, 0, 0, 12]);

封装成自定义方法

如果需要频繁使用这个逻辑,可以给Vec扩展一个自定义方法:

use std::default::Default;

trait VecSetWithFill<T: Default> {
    fn set_with_fill(&mut self, index: usize, value: T);
}

impl<T: Default> VecSetWithFill<T> for Vec<T> {
    fn set_with_fill(&mut self, index: usize, value: T) {
        self.resize(index + 1, Default::default());
        self[index] = value;
    }
}

// 使用方式和你示例中的<some_method>一致
fn main() {
    let mut vec: Vec<i32> = Vec::new();
    vec.set_with_fill(3, 12);
    assert_eq!(vec[..], [0, 0, 0, 12]);
}

关键说明

Vec::resize方法会自动处理长度调整:当当前长度小于目标长度时,会追加由Default::default()生成的元素(对于i32就是0);如果当前长度大于目标长度,则会截断Vec到目标长度。这里我们只用到它的扩展填充能力,完全符合需求。

内容的提问来源于stack exchange,提问作者w1ke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:27:21