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

Rust中如何按不同顺序迭代vec或slice的前缀与后缀

Rust 前缀/后缀遍历实现方案

我们可以直接使用Rust标准库的范围迭代+切片索引实现所有需求,全程无额外内存拷贝,性能开销极低。

首先定义待遍历的vec:

let v = vec![1, 2, 3, 4];

各需求实现如下:

  • 按长度从短到长迭代前缀
    遍历0到vec长度的所有整数,依次取前i位的切片即可
    let iter_short_to_long_prefix = (0..=v.len()).map(|i| &v[..i]);
    // 输出验证:&[], &[1], &[1,2], &[1,2,3], &[1,2,3,4]
    
  • 按长度从长到短迭代前缀
    反向遍历0到vec长度的所有整数,依次取前i位的切片
    let iter_long_to_short_prefix = (0..=v.len()).rev().map(|i| &v[..i]);
    // 输出验证:&[1,2,3,4], &[1,2,3], &[1,2], &[1], &[]
    
  • 按长度从短到长迭代后缀
    遍历0到vec长度的所有整数,依次取末尾i位的切片
    let iter_short_to_long_suffix = (0..=v.len()).map(|i| &v[v.len() - i..]);
    // 输出验证:&[], &[4], &[3,4], &[2,3,4], &[1,2,3,4]
    
  • 按长度从长到短迭代后缀
    遍历0到vec长度的所有整数,依次跳过前i位取剩余切片即可,也可以用反向遍历长度的写法
    // 写法1 更直观
    let iter_long_to_short_suffix = (0..=v.len()).map(|i| &v[i..]);
    // 写法2 和其他需求格式统一
    // let iter_long_to_short_suffix = (0..=v.len()).rev().map(|i| &v[v.len() - i..]);
    // 输出验证:&[1,2,3,4], &[2,3,4], &[3,4], &[4], &[]
    

以上得到的都是标准库惰性迭代器,如果你需要提前收集所有切片到Vec中,可以在迭代器后调用.collect::<Vec<_>>()即可。所有实现兼容Vec、固定长度数组、普通切片三类集合结构,不需要修改逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:30:02