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;
}
三、输出效果
旅游汽车早到
旅游汽车迟到
旅游走路早到
旅游走路迟到
上学汽车早到
上学汽车迟到
上学走路早到
上学走路迟到
上班汽车早到
上班汽车迟到
上班走路早到
上班走路迟到
四、笛卡尔积的具体过程:
集合 A = ["旅游", "上学", "上班"]
集合 B = ["汽车", "走路"]
集合 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
循环的问题
相关文章:
C#高级:结合Linq的SelectMany方法实现笛卡尔积效果
一、笛卡尔积定义 又称直积,表示为X Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 二、基础示例 class Program {static void Main(string[] args){try{List<List<string>> input new List<List<string&g…...
【洛谷入门赛】B4018 游戏与共同语言
题意 这里有两个队伍分别叫 A 和 B。 分别给定这两个队伍的胜利数、净胜局、平局数量。 求哪个队更厉害,就输出哪个。 具体比较规则如下: 两队中胜利数高的队伍更厉害。 若胜利数相同,净胜数高的队伍更厉害。 若净胜数仍然相同&#x…...
Python学习总结
客户端与服务端聊天窗口 服务端 导入 wxPython 用于创建图形界面。 socket 用于网络通信,AF_INET 是 IPv4 地址族,SOCK_STREAM 表示流式套接字(TCP)。 利用wxPython 创建图形界面,并通过 socket 与服务器通信。 主要…...
android系统_模拟ZygoteServer写一个socket通信
目录 一,模拟ZygoteServer 二,Client 代表app 三,输出结果 四,结束语 一,模拟ZygoteServer ZygoteServer,不断的监听来自客户端的请求 package org.study.tiger;import java.io.*; import java.net.*; import java.util.concurrent.*;import java.io.*; impor…...
LangChain教程 - RAG - PDF问答
系列文章索引 LangChain教程 - 系列文章 在现代自然语言处理(NLP)中,基于文档内容的问答系统变得愈发重要,尤其是当我们需要从大量文档中提取信息时。通过结合文档检索和生成模型(如RAG,Retrieval-Augment…...
李代数(Lie Algebras)与Attention:深度学习中的数学之美
李代数与Attention:深度学习中的数学之美 引言 作为一名深度学习研究者,您一定对Transformer模型和其中的注意力机制(Attention)不陌生。Attention通过查询(Query)、键(Key)和值&a…...
docker本地镜像源搭建
最近Deepseek大火后,接到任务就是帮客户装Dify,每次都头大,因为docker源不能用,实在没办法,只好自己搭要给本地源。话不多说具体如下: 1、更改docker的配置文件,添加自己的私库地址,…...
监督学习单模型—线性模型—LASSO回归、Ridge回归
目标变量通常有很多影响因素,通过各类影响因素构建对目标变量的回归模型,能够实现对目标的预测。但根据稀疏性的假设,即使影响一个变量的因素有很多,其关键因素永远只会是少数。在这种情况下,还用传统的线性回归方法来…...
StableDiffusion打包 项目迁移 项目分发 1
文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新:https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序: python3.10.6: https://www.python.org/downloads/release/python-3106/gi…...
【C++】模板初阶
文章目录 一. 泛型编程1.1 什么是模板1.2 为什么要使用模板 二. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.4.1 隐式实例化2.4.2 显式实例化 2.5 模板参数的匹配原则 三. 类模板3.1 类模板的定义格式3.2 类模板的实例化3.3 在类模板外…...
STM32学习【4】ARM汇编(够用)
目录 ARM汇编语言基础写在前面 1. ARM汇编的分类2. 关于指令集指令集切换Thumb2指令集统一汇编语言(UAL)常用汇编指令 3. 汇编格式立即数与伪指令 4. 操作内存的汇编指令LDR:从内存加载数据到CPU寄存器STR:将数据从寄存器存储到内…...
傅里叶分析
傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…...
Jmeter插件下载及安装
1、在Jmeter官网(Install :: JMeter-Plugins.org)下载所需插件 2、将下载的插件复制到jmeter文件下的lib/ext文件里(PS:D:\Jmeter\apache-jmeter-5.6.2\lib\ext) 3、打开Jmeter,选择 选项----Plugins Manag…...
Docker迁移/var/lib/docker之后镜像容器丢失问题
迁移/var/lib/docker时,如果目标目录少写一个/,/etc/docker/daemon.json中的data-root后面需要多加一级目录docker。 若迁移命令如下 rsync -avz /var/lib/docker /home/docker/ 在/etc/docker/daemon.json中添加如下内容 "data-root": &q…...
【C++】深入理解List:双向链表的应用
凭时间赢来的东西,时间肯定会为之作证。 前言 这是我自己学习C的第七篇博客总结。后期我会继续把C学习笔记开源至博客上。 上一期笔记是关于C的vector类知识,没看的同学可以过去看看:【C】探索Vector:灵活的数据存储解决方案-CS…...
如何使用 Ollama 的 API 来生成文本
如何使用 Ollama 的 API 来生成文本 简介 生成文本 生成文本的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API,允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能,包括模型管理、运行和监控。本…...
Redis除了做缓存还有哪些应用场景
我用「现实场景代码简例」帮你彻底掌握Redis的18般武艺。先记住这句话:Redis是数据结构的瑞士军刀。以下分7大核心应用方向讲解: 一、高频面试答案速记版 1. 分布式锁 → 超市储物柜机制 2. 计数器 → 直播间点赞统计 3. 排行榜 → 游戏战力榜 4. 消息队…...
软件工程复试专业课-测试
测试 1 软件质量2 黑盒测试2.1 概念2.2 等价划分类 2.3 边值分析2.4 错误推测2.5 因果图 3 白盒测试3.1概念3.2 覆盖标准3.2.1 语句覆盖3.2.2 判断覆盖3.2.3 条件覆盖3.2.4 判定/条件覆盖3.2.5 条件组合覆盖3.2.6 路径覆盖 4 软件测试的四个阶段5 测试工具 1 软件质量 定义&…...
html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Maven的传递性、排除依赖、生命周期、插件
一、Maven的传递性 蓝色背景中的两个jar包是projectA的直接依赖,其余的Jar包是projectA的间接依赖。 projectA可以使用直接依赖,也可以使用间接依赖。 maven-projectB项目引入了maven-projectC(整个项目打成了jar包)和junit两个jar包。 ma…...
Java 调试模式下 Redisson 看门狗失效
一、场景分析 前几天在做分布式锁测试: 在调试模式下,lock.lock() 之后打上断点,想测试一下在当前线程放弃锁之前,别的线程能否获取得到锁。 发现调试模式下,看门狗机制失效了,Redis 上 30 秒后࿰…...
PHP下载安装以及基本配置
目录 引言 官网 下载 配置 1. 鼠标右键“此电脑”>“属性” 2. 打开高级系统设置 3. 打开环境变量 4. 双击系统变量中的path 5. 新建新的path 6. 将刚刚安装的位置加入环境变量 7. 检查是否安装成功 引言 PHP(“PHP: Hypertext Preprocessor”&#…...
Vue nextTick原理回顾
nextTick就是将异步函数放在下一次实践循环的微任务队列中执行 实现原理比较简单,极简版本: function myNextTick(cb){let p;pPromise.resolve().then(cb)return cb?p:Promise.resolve() }复杂版本,考虑异步函数入队、执行锁、兼容处理 l…...
【Javascript】js精度丢失
当JS处理大整数或者浮点数的时候会出现精度丢失的情况。 Javascript的数字都使用双精度浮点数表示,遵循IEEE754标准 比如我遇到的问题,对一个小数的四舍五入,保留2位小数: 235.985≈235.98 235.9851≈235.99 原理请大家参考百度&…...
Go在1.22版本修复for循环陷阱
记录 前段时间升级Go版本碰到一个大坑,先记录。 先上代码案例: func main() {testClosure() }func testClosure() {for i : 0; i < 5; i {defer func() {fmt.Println(i)}()} }在1.22之下(不包括1.22)版本: 输出的…...
服务器离线部署DeepSeek
目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网,因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…...
PhotoDoodle: Learning Artistic Image Editing from Few-Shot Examples 论文解读
目录 一、概述 二、PhotoDoodle 1、OmniEditor的预训练 2、DiT重点 3、无噪声条件范式与CFM 4、EditLoRA 4.1关于LoRA 4.2关于EditLoRA 三、相关工作 一、概述 风格化图像编辑的论文! 介绍了PhotoDoodle,一个基于扩散模型的图像编辑框架&#x…...
的pythonAPI文档含义
Open3D的pythonAPI文档含义 Open3D的pythonAPI文档含义1、相关文档1.[Open3D的python文档]2 [Open3D的cpp文档] 2、结论 >> 看了好久的文档,奶奶的什么个意思。1. class Type是一个枚举类,PointCloud等是枚举成员,每个成员在python有 n…...
跟着AI学vue第十三章
第十三章:技术传承与行业影响力塑造 到了这个阶段,你已经在Vue技术领域积累了深厚的经验,拥有了较强的技术实力。此时,你的重点将是把自己的知识和经验传递给更多人,在行业内树立起影响力,推动整个Vue技术…...
实现实时数据仓库开源项目
根据你的需求,以下是一些可以实现类似 ClickHouse 的实时数仓功能的项目,这些项目提供了高性能的数据处理和分析能力,适合实时数据仓库的场景: 1. Apache Doris Apache Doris 是一个开源的实时数据仓库,支持高吞吐量…...
实现了一个自适应的NOC路由机制,包括构建流量图、设计拥塞预测模型、优化路由策略和评估性能
以下是针对设计和实现自适应的网络 - on - chip (NOC) 路由机制的详细步骤及代码示例: 1. 分析NOC路由路径拥塞的原因及传统方法的不足之处 拥塞原因: 动态流量变化:芯片内不同模块的工作负载随时间变化,导致局部流量突然增加。…...
光速解决phpstudy无法启动MySQL服务
问题描述 在初步安装使用phpstudy时,会出现mysql服务启动失败的情况,具体表现为点击一键启动后,mysql启动又立即停止 原因及解决方法: phpstudy数据库无法启动有以下几个原因,可以看看自己是第几种: 服务名…...
2022 年 9 月青少年软编等考 C 语言五级真题解析
目录 T1. 城堡问题思路分析T2. 斗地主大师思路分析T3. 玩具摆放思路分析T4. 哥斯拉大战金刚思路分析T1. 城堡问题 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ######---#####---#---#####---# 2 # # | # # # # ##…...
【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器
安装Ubuntu 服务器 通过ubuntu官网下载ubuntu 24服务器版本 刻录光盘(也可以使用U盘) 用光盘启动PC机器(必须是带显卡的PC机,包括集成Intel显卡的也行,纯CPU计算的服务器基本上不能使用) 最小化安装Ubuntu…...
阿里云ack的创建与实战应用案例
阿里云ack的创建与应用案例 创建前开通ack相关服务:开始创建简单的魔方游戏,熟悉sv与clb自动注册创建部署一个nginx 服务示例:走不同域名访问不同svc资源:为什么需要 Ingress ?创建第一个域名的 Deployment和Service。…...
制造业数字化实践案例丨国内某大型物联网企业数字化项目管理系统,赋能品牌和生态战略落地
30秒快读 该大型物联网企业在规模化和业务扩展过程中,面临项目管理模式单一、供应链与客户端协同不足、项目过程数据透明度低、软硬件项目管理分离等痛点,数字化项目管理系统建设旨在构建以项目制为核心的流程型组织,建立内外部高效协同的项…...
当AI重构认知:技术狂潮下的教育沉思录
备注:文章未Deepseek R1模型辅助生成,如有不妥请谅解。 以下使原文: 我有三个娃,各间隔4到5岁,经历过搜索引擎,短视频,短剧,本身曾经也是教育专业出生,任何事务都有两面性…...
Game Maker 0.11更新:构建社交竞速游戏并增强玩家互动
在这三部分系列中,我们将介绍如何实现Game Maker 0.11中一些最激动人心的新功能。 欢迎来到我们系列文章的第一篇,重点介绍了The Sandbox Game Maker 0.11更新中的新特性。 The Sandbox Game Maker 0.11是一个多功能工具,帮助创作者通过游戏…...
ubuntu配置jmeter
1.前提准备 系统 ubuntu server 22.04 前提条件:服务器更新apt与安装lrzsz:更新apt: sudo apt update安装lrzsz: 命令行下的上传下载文件工具 sudo apt install lrzszsudo apt install zip2.安装jemeter 2.1.下载jdk17 输入命令…...
计算机毕业设计Python+DeepSeek-R1大模型考研院校推荐系统 考研分数线预测 考研推荐系统 考研(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
字段对比清洗
import pandas as pd import psycopg2 from psycopg2 import sql# 数据库连接配置 DB_CONFIG {"host": "","user": "","password": "","dbname": "","port": , }def get_excel_fi…...
过滤器 二、过滤器详解
过滤器生命周期: init(FilterConfig):在服务器启动时会创建Filter实例,并且每个类型的Filter只创建一个实例,从此不再创建!在创建完Filter实例后,会马上调用init()方法完成初始化工作,这个方法…...
七、Three.jsPBR材质与纹理贴图
1、PBR材质金属度和粗糙度 1、金属度metalness 金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。 threejs的PBR材质,.metalness默认是0.5,0.0到1.0之间的值可用于生锈的金属外观 new THREE.MeshStandardMaterial({met…...
分布式主键生成服务
目录 一、使用线程安全的类——AtomicInteger或者AtomicLong 二、主键生成最简单写法(不推荐) 三、主键生成方法一:Long型id生成——雪花算法 四、主键生成方法二:流水号 (一)流水号概述 (二)添加配置 1.pom.xml 2.application.properties 3.创…...
【Day50 LeetCode】图论问题 Ⅷ
一、图论问题 Ⅷ 1、dijkstra算法 堆优化 采用堆来优化,适合节点多的稀疏图。代码如下: # include<iostream> # include<vector> # include<list> # include<queue> # include<climits>using namespace std;class myco…...
人大金仓KCA | 用户与角色
人大金仓KCA | 用户与角色 一、知识预备1. 用户和角色 二、具体实施1. 用户管理-命令行1.1 创建和修改用户1.2 修改用户密码1.3 修改用户的并发连接数1.4 修改用户的密码有效期 2.用户管理-EasyKStudio2.1 创建和修改用户2.2 修改用户密码2.3 修改用户的并发连接数2.4 修改用户…...
嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)
目录 步骤 1:准备工作 步骤 2:创建 Keil 项目,并配置工程 步骤 3:在MDK工程上添加 CMSIS-DSP 库 步骤 5:编写代码 步骤 6:配置时钟和优化 步骤 7:调试与验证 步骤 8:优化和调…...
【AI学习从零至壹】Numpy基础知识
PyTorch基础知识 Numpy基础NumPy 基本数据类型Numpy数组 NumPy 基础数组创建Numpy特殊数组创建Numpy数组的访问NumPy数组的遍历Numpy数组的常用属性比较常用的属性有: Numpy数组的基本操作Numpy数组的数学操作加减乘除 Numpy线性代数Numpy广播机制 Numpy基础 NumPy…...
Day11,Hot100(贪心算法)
贪心 (1)121. 买卖股票的最佳时机 第 i 天卖出的最大利润,即在前面最低价的时候买入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…...
Transformer 代码剖析1 - 数据处理 (pytorch实现)
引言 Transformer 架构自《Attention Is All You Need》论文发表以来,在自然语言处理领域引起了巨大的变革。它摒弃了传统的循环结构,完全基于注意力机制,显著提高了处理序列数据的效率和性能。本文将通过对一个具体的项目代码结构进行详细分…...