我试图压缩两个长度不等的迭代器,它只在两个迭代器中都有值时返回,而忽略最长迭代器中的其余部分.

fn main() {
    let num1 = vec![1, 2];
    let num2 = vec![3];

    for i in num1.iter().rev().zip(num2.iter().rev()) {
        println!("{:?}", i);
    }
}

返回(2, 3).如何让它返回:

(2, 3)
(1, 0) // default is the 0 here.

还有别的办法吗?

推荐答案

你可以使用itertools crate 提供的zip_longest.

use itertools::{
    Itertools,
    EitherOrBoth::*,
};

fn main() {
    let num1 = vec![1, 2];
    let num2 = vec![3];

    for pair in num1.iter().rev().zip_longest(num2.iter().rev()) {
        match pair {
            Both(l, r) => println!("({:?}, {:?})", l, r),
            Left(l) => println!("({:?}, 0)", l),
            Right(r) => println!("(0, {:?})", r),
        }
    }
}

这将产生以下输出:

(2, 3)
(1, 0)

Rust相关问答推荐

有没有方法处理rust中嵌套的ok_or()?

在Rust中宏的表达式中提取对象

如何为 struct 字段设置新值并在Ruust中的可变方法中返回旧值

如何模拟/创建ReqData以测试Actix Web请求处理程序?

Rust 中的静态引用

在 Rust 中,在第一个空格上分割字符串一次

如何处理闭包中的生命周期以及作为参数和返回类型的闭包?

Rust 如何返回大类型(优化前)?

Rust 如何将链表推到前面?

为什么不能在 Rust 中声明静态或常量 std::path::Path 对象?

Rust 中的生命周期:borrow 的 mut 数据

哪些特征通过 `Deref` 而哪些不通过?

Rust 函数指针似乎被borrow 判断器视为有状态的

Rust 将特性传递给依赖项

在 Rust 中如何将值推送到枚举 struct 内的 vec?

如何在 Rust Polars 中可靠地连接 LazyFrames

仅当满足外部条件时如何添加到 actix web 的路由

用逗号分隔字符串,但在标记中使用逗号

如何创建动态创建值并向它们返回borrow 的工厂?

当引用不再被borrow 时,Rust 不会得到它