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

如何在Rust中使用迭代器循环遍历不同长度的数组?

解决Rust中多长度向量循环迭代的问题

问题分析

你的代码无法运行有两个核心原因:

  1. cycles是一次性消费的迭代器,无法在loop中重复使用
  2. Cycle迭代器的next()方法需要可变借用,但原代码中闭包里的迭代器是不可变的,无法调用next()

解决方案

我们需要把每个循环迭代器存入一个可变容器,每次循环通过可变引用调用next(),代码示例如下:

fn main() {
    let vectors = vec![
        vec![0, 1],
        vec![2, 3, 4]
    ];

    // 将每个向量转换为循环迭代器,并存入可变Vec
    let mut cycles: Vec<_> = vectors
        .into_iter()
        .map(|vec| vec.into_iter().cycle())
        .collect();

    loop {
        // 对每个循环迭代器取下一个元素
        let output: Vec<_> = cycles
            .iter_mut()
            .map(|iter| iter.next().unwrap())
            .collect();
        
        println!("{:?}", output);
        // 可添加终止条件避免无限循环,比如循环指定次数后break
        // std::thread::sleep(std::time::Duration::from_secs(1));
    }
}

代码说明

  • 使用collect()将所有循环迭代器存入可变Vec,这样可以重复访问每个迭代器
  • iter_mut()为容器中的每个迭代器提供可变引用,满足next()方法对&mut self的要求
  • 这个写法天然支持任意k个向量的场景,不管向量长度是否一致,都会循环取出每个向量的元素

运行结果

执行后会按预期输出:

[0, 2]
[1, 3]
[0, 4]
[1, 2]
[0, 3]
[1, 4]
...

内容的提问来源于stack exchange,提问作者Luís Assunção

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:20:24