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

如何移除转置Vec<Vec<T>>函数中无用的(0..)迭代器?

重构Vec<Vec>转置函数,移除无用迭代器

你写的这个转置函数里,(0..)作为无限迭代器仅用来触发循环,完全没用到迭代变量,确实可以重构掉。

用std::iter::from_fn就能完美替代原逻辑,它允许我们自定义生成迭代元素的闭包,直到闭包返回None时终止迭代。重构后的代码如下:

fn transpose<T>(v: Vec<Vec<T>>) -> Vec<Vec<T>> {
    let mut xs = v.into_iter().map(|x| x.into_iter()).collect::<Vec<_>>();
    std::iter::from_fn(|| {
        let row: Vec<_> = xs.iter_mut().filter_map(|x| x.next()).collect();
        if !row.is_empty() {
            Some(row)
        } else {
            None
        }
    }).collect()
}

这个逻辑和原代码完全一致:每次遍历所有子迭代器,收集它们的下一个元素组成一行;当某一次收集到的行是空的(说明所有子迭代器都耗尽了),就终止迭代,最终把所有行收集成转置后的二维向量。

这样就彻底去掉了那个没用的(0..)无限迭代器,代码逻辑也更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:42:07