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

Rust是否有内置函数实现迭代器的笛卡尔积组合?

Rust中实现迭代器笛卡尔积的方法

你要实现的是两个迭代器的笛卡尔积(即每个元素两两配对),Rust标准库可以通过flat_map结合map实现,也可以用第三方库itertools提供的更简洁的product方法。

一、标准库实现(无需额外依赖)

利用flat_map将第一个迭代器的每个元素,映射为第二个迭代器与该元素配对后的新迭代器,再将所有子迭代器展平:

fn main() {
    let t = (1..3)
        .into_iter()
        .flat_map(|x| (3..6).into_iter().map(move |y| (x, y)))
        .collect::<Vec<(usize, usize)>>();
    
    assert_eq!(t, vec![(1,3), (1,4), (1,5), (2,3), (2,4), (2,5)]);
}

注意点:

  • 使用move闭包捕获x,确保每个子迭代器能持有对应的x值
  • 最终收集的类型是Vec<(usize, usize)>,而非你示例中的Vec<usize>(因为配对后是元组类型)

二、第三方库itertools实现(更简洁)

itertools是Rust生态中常用的迭代器工具库,提供了直接生成笛卡尔积的product方法:

  1. 先在Cargo.toml中添加依赖:
[dependencies]
itertools = "0.12"
  1. 使用product方法的示例代码:
use itertools::Itertools;

fn main() {
    let t = (1..3)
        .into_iter()
        .product::<(usize, usize)>((3..6).into_iter())
        .collect::<Vec<(usize, usize)>>();
    
    assert_eq!(t, vec![(1,3), (1,4), (1,5), (2,3), (2,4), (2,5)]);
}

这个方式和Haskell的列表推导式[(x,y)| x <- [1..3], y <- [3..6]]语义完全一致,写法更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:13