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

Rust中生成连续整数切片的惯用方法是什么?

问题解答

首先,你当前的实现可以简化为更惯用的写法:

&(0..len).collect::<Vec<usize>>()

因为Vec<T>实现了Deref<Target=[T]>,&Vec<usize>会被自动隐式转换为&[usize],无需额外调用as_slice()。

无内存分配的实现方案

  • 编译期已知长度:可以用静态数组实现零分配
const LEN: usize = 5;
const INDICES: [usize; LEN] = {
    let mut arr = [0; LEN];
    let mut i = 0;
    while i < LEN {
        arr[i] = i;
        i += 1;
    }
    arr
};

// 使用时直接取切片
let indices_slice: &[usize] = &INDICES;
  • 运行时动态长度:不存在无内存分配的通用方案
    Range<usize>是惰性迭代器,仅记录起始/结束值,不存储完整元素集,无法直接转为连续内存的切片;栈分配数组需要固定大小,无法适配动态长度,且长度过大时会引发栈溢出。这种场景下,用Vec收集迭代器元素是最通用、最符合Rust惯用风格的选择,内存分配开销在多数场景下可接受。

如果需要频繁创建这类索引切片,可封装工具函数简化调用:

fn indices(len: usize) -> Vec<usize> {
    (0..len).collect()
}

// 使用示例
let indices_slice: &[usize] = &indices(len);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:33:20