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

如何使用Iterator实现两个Vec的笛卡尔乘积

Rust 两个Vec生成笛卡尔积拼接字符串的实现方案

纯标准库实现(无外部依赖)

直接使用标准库迭代器的flat_map和map组合即可实现需求,代码如下:

let x = vec!['1', '2', '3'];
let y = vec!['a', 'b', 'c'];

let result: Vec<String> = x
    .iter()
    .flat_map(|&x_char| {
        // 对x的每一个字符,遍历y的所有字符拼接,生成对应子迭代器
        y.iter().map(move |&y_char| {
            format!("{x_char}{y_char}")
        })
    })
    .collect();

// 校验输出符合预期
assert_eq!(
    result,
    vec!["1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c"]
);

逻辑说明

  • 外层调用flat_map遍历x的所有字符,作用是将内层每个x字符对应的子迭代器的输出,摊平为一维的迭代器序列
  • 内层调用map遍历y的所有字符,通过move关键字将当前x字符转移进闭包,和y字符拼接为新的字符串
  • 最后调用collect方法,直接将迭代器转换为目标Vec<String>类型,无需手动循环添加元素

第三方库简化实现(可选)

如果项目允许引入第三方依赖,可以使用itertools库提供的cartesian_product方法,代码更简洁易读:

  1. 先在Cargo.toml中添加依赖:
itertools = "0.12"
  1. 实现代码:
use itertools::Itertools;

let x = vec!['1', '2', '3'];
let y = vec!['a', 'b', 'c'];

let result: Vec<String> = x
    .iter()
    .cartesian_product(y.iter())
    .map(|(&x_char, &y_char)| format!("{x_char}{y_char}"))
    .collect();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:27:03