C#高级:结合Linq的SelectMany方法实现笛卡尔积效果

 一、笛卡尔积定义

        又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

二、基础示例 

class Program
{
    static void Main(string[] args)
    {
        try
        {
            List<List<string>> input = new List<List<string>>
            {
                new List<string> { "旅游", "上学", "上班" },  // 第一个选项集
                new List<string> { "汽车", "走路" },          // 第二个选项集
                new List<string> { "早到", "迟到" }           // 第三个选项集
            };

            // result = 每次迭代的组合结果,初始值为包含一个空字符串
            var result = new List<string> { "" };

            // 使用 foreach 迭代每个内层 List<string>,进行组合
            foreach (var item in input)
            {
                // 使用 SelectMany 进行笛卡尔积式的组合
                // result ×  input  (result的子元素是x,input的子元素是item,input的孙子元素是i,笛卡尔积要求直积的类型相同,因此是x+i)
                result = result.SelectMany(x => item, (x, i) => x + i).ToList();
            }

            foreach (var item in result)
            {
                Console.WriteLine(item);  // 打印每一个组合结果
            }
        }
        catch (Exception ex)
        {
            // 如果程序执行过程中发生异常,会进入此代码块输出错误信息
            Console.WriteLine($"发生错误: {ex.Message}");
        }
    }

}

        在没有 SelectMany 的情况下,我们通常需要使用嵌套的 for 循环来实现类似的功能。假设没有 SelectMany,你可能需要编写一个嵌套 for 循环,如下:

List<string> result = new List<string> { "" };

foreach (var item in input)
{
    List<string> tempResult = new List<string>();
    foreach (var x in result)
    {
        foreach (var i in item)
        {
            tempResult.Add(x + i);
        }
    }
    result = tempResult;
}

三、输出效果

旅游汽车早到
旅游汽车迟到
旅游走路早到
旅游走路迟到
上学汽车早到
上学汽车迟到
上学走路早到
上学走路迟到
上班汽车早到
上班汽车迟到
上班走路早到
上班走路迟到

四、笛卡尔积的具体过程:

  1. 集合 A = ["旅游", "上学", "上班"]
  2. 集合 B = ["汽车", "走路"]
  3. 集合 C = ["早到", "迟到"]

        笛卡尔积的过程就是将这三个集合中所有可能的元素配对出来。我们可以按照三次遍历的方式,逐步生成每一个组合:

第一步:空字符和集合 A 做笛卡尔积

开始时我们没有任何元素,所以和集合 A 做笛卡尔积,结果就是 A 的每个元素。

旅游 上学 上班

第二步:集合 A 和集合 B 做笛卡尔积

接下来,我们将第一次遍历的结果和集合 B 做笛卡尔积。也就是说,将第一次结果中的每个元素与集合 B 中的每个元素组合。

旅游汽车 旅游走路 上学汽车 上学走路 上班汽车 上班走路

第三步:集合 B 和集合 C 做笛卡尔积

最后,我们将第二步得到的每个组合结果与集合 C 做笛卡尔积。

旅游汽车早到 旅游汽车迟到 旅游走路早到 旅游走路迟到 上学汽车早到 上学汽车迟到 上学走路早到 上学走路迟到 上班汽车早到 上班汽车迟到 上班走路早到 上班走路迟到

笛卡尔积的结果数目 = 集合中元素个数的乘积

  • A={旅游,上学,上班}(3个元素)
  • B={汽车,走路}B={汽车,走路}(2个元素)
  • C={早到,迟到}C={早到,迟到}(2个元素)

根据笛卡尔积的规则,笛卡尔积的结果数目为:

3×2×2=12

 五、总结

        示例代码涉及到了迭代算法,并且 SelectMany 可以用来解决类似于嵌套 for 循环的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通信原理速成笔记(信息论及编码)

信息论基础 信息的定义与度量 信息是用来消除不确定性的内容。例如&#xff0c;在猜硬币正反的情境中&#xff0c;结果存在正反两种不确定性&#xff0c;而得知正确结果能消除这种不确定性&#xff0c;此结果即为信息。单个事件的信息量&#xff1a;对于离散信源中的事件xi​&…

MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享

一、背景 在文档搜索场景中&#xff0c;高效精准的搜索功能至关重要&#xff0c;能提升检索效率&#xff0c;为用户提供精准、快速的信息获取体验&#xff0c;提高工作效率。在文档管理系统里&#xff0c;全文搜索是非常重要的功能之一。随着文档数量增长&#xff0c;如何快速…

力扣hot100——回溯

文章目录 前言55.全排列题目描述思路&#xff1a;DFS回溯code 56.子集题目描述思路&#xff1a;dfs回溯code 57.电话号码的字母组合题目描述思路&#xff1a;DFS回溯code 58.数组总和题目描述题目描述code 59.括号生成题目描述思路&#xff1a;DFS回溯code 60.单词搜索题目描述…

云和恩墨亮相PolarDB开发者大会,与阿里云深化数据库服务合作

2025年2月26日&#xff0c;备受瞩目的阿里云PolarDB开发者大会于北京嘉瑞文化中心盛大举行&#xff0c;众多行业精英齐聚一堂&#xff0c;共襄技术盛会。云和恩墨作为阿里云重要的生态合作伙伴受邀参会。云和恩墨联合创始人兼技术研究院总经理杨廷琨与阿里云智能数据库产品事业…

Vue前端项目构建教程

文章目录 1. 引言2.环境准备2.1 请自行查找资料安装以下开发工具2.2 安装cnpm 3. 创建Vue3项目3.1 安装依赖3.2 项目结构 4. 配置Vue项目4.1 在项目根目录下添加环境变量文件4.2 添加环境变量 5. 常用插件和工具总结 1. 引言 本前端项目将使用Vue3 Vite4构建。 Vue3是目前最…

seacms v9 实现的MySQL注入

目录 过滤关键词information_schema 怎么办 一、环境搭建 二、环境分析 三、源代码分析 1、过滤程序 2、注入点 四、获取数据库名 五、获取数据库表名 六、获取表的列名 七、获取数据信息 过滤关键词information_schema 怎么办 1.、利用sys数据库&#xff08;MySQL 5.…

鸿蒙NEXT开发-元服务和服务卡片的开发

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 目录 1. 元服务基本概念 1.1 基本介绍 1.2 元…

【考试大纲】高级系统架构设计师考试大纲

目录 引言一、 考试说明1.考试目标2.考试要求3.考试科目设置二、 考试范围考试科目1:系统架构设计综合知识考试科目2:系统架构设计案例分析考试科目3:系统架构设计论文引言 最新的系统架构设计师考试大纲出版于 2022 年 11 月,本考试大纲基于此版本整理。 一、 考试说明…

Springboot快速接入豆包大模型

背景 突然接到上面的通知&#xff0c;想要在系统里面接入各大模型的能力&#xff0c;我这边随机选了个豆包&#xff0c;然后快速对接了一下&#xff0c;很顺利&#xff0c;一把过&#xff0c;现在文档的快速入门还是很ok的&#xff0c;在此记录一下过程&#xff0c;给宝子们参考…

Failed to start The PHP FastCGI Process Manager.

报错如下&#xff1a; Job for php-fpm.service failed because the control process exited with error code. See "systemctl status php-fpm.service" and "journalctl -xe" for details. 2月 25 21:49:00 nginx systemd[1]: Starting The PHP FastC…

【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案

【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案 一、前言 目前应用上架华为AGC平台&#xff0c;都会被要求适配折叠屏设备。目前华为系列的折叠屏手机&#xff0c;有华为 Mate系列&#xff08;左右折叠&#xff0c;华为 Mate XT三折叠&#xff09;&#xff0c;华为Pocket 系列…

coze生成的工作流,发布后,利用cmd命令行执行。可以定时发日报,周报等。让他总结你飞书里面的表格。都可以

coze生成的工作流&#xff0c;发布后&#xff0c;利用cmd命令行执行。可以定时发日报&#xff0c;周报等。让他总结你飞书里面的表格。都可以。 很简单。 准备工作&#xff0c;先发布你的工作流&#xff0c;和发布应用。 然后&#xff0c;点击扣子API 。 申请一个&#xff0…

【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器

安装Ubuntu 服务器 通过ubuntu官网下载ubuntu 24服务器版本 刻录光盘&#xff08;也可以使用U盘&#xff09; 用光盘启动PC机器&#xff08;必须是带显卡的PC机&#xff0c;包括集成Intel显卡的也行&#xff0c;纯CPU计算的服务器基本上不能使用&#xff09; 最小化安装Ubuntu…

25年前端如何走的更稳

2025年&#xff0c;随着deepseek引起的AI大模型技术的深度革命&#xff0c;带来了很多机会和挑战&#xff0c;前端程序员作为互联网里一个普通但必不可少的岗位&#xff0c;在当前形势下&#xff0c;需要主动变革才能走的更稳。本文简单介绍三个方向&#xff0c;Web3前端、全栈…

Ubuntu+deepseek+Dify本地部署

1.deepseek本地部署 在Ollama官网下载 需要魔法下载 curl -fsSL https://ollama.com/install.sh | sh 在官网找到需要下载的deepseek模型版本 复制命令到终端 ollama run deepseek-r1:7b 停止ollama服务 sudo systemctl stop ollama # sudo systemctl stop ollama.servi…

【PyTorch][chapter-33][transformer-5] MHA MQA GQA, KV-Cache

主要翻译外网&#xff1a; 解剖Deep Seek 系列&#xff0c;详细见参考部分。 目录&#xff1a; Multi-Head Attention &#xff08;MHA) KV-Cache KV-Cache 公式 Multi-Query Attention&#xff08;MQA) Grouped-Query Attention(GQA) Multi-Head Latent Attention …

Spring Boot 流式响应豆包大模型对话能力

当Spring Boot遇见豆包大模型&#xff1a;一场流式响应的"魔法吟唱"仪式 一、前言&#xff1a;关于流式响应的奇妙比喻 想象一下你正在火锅店点单&#xff0c;如果服务员必须等所有菜品都备齐才一次性端上来&#xff0c;你可能会饿得把菜单都啃了。而流式响应就像贴…

记录Liunx安装Jenkins时的Package ‘jenkins‘ has no installation candidate

1、确保是否安装了Java&#xff0c;如果没有&#xff0c;可通过以下命令进行安装&#xff1a; sudo apt update sudo apt install openjdk-21-jre2、安装Jenkins sudo apt update sudo apt install jenkins执行sudo apt install jenkins时&#xff0c;可能会出现 意思是&…

Windows用户如何零成本迁移Sketch项目?2025实测方案推荐

在设计领域&#xff0c;Sketch一直是UI/UX设计师的不二之选。它凭借简洁的界面、强大的矢量绘图功能深受设计师们的喜爱。尽管有着广泛的应用和众多优势&#xff0c;但Sketch仅支持MacOS系统&#xff0c;这对于Windows用户来说是一个巨大的限制。 然而&#xff0c;随着设计需求…

通过百度构建一个智能体

通过百度构建一个智能体 直接可用,我不吝啬算力 首先部署一个模型,我们选用deepseek14 构建智能体思考步骤,甚至多智能体; from openai import OpenAIclass Agent:def __init__(self, api_key, base_url, model