当前位置: 首页 > news >正文

C#开发-集合使用和技巧(六)特殊转换方法SelectMany的介绍和用法

介绍

SelectMany 方法在C#中用于将集合中的元素转换为其他类型的集合,并将这些集合扁平化为一个单一的序列。它是LINQ的一部分,允许你在一个序列上进行投影和过滤操作,然后将结果合并成一个序列。

方法定义

public static IEnumerable<TResult> SelectMany<TSource, TResult>(this IEnumerable<TSource> source,Func<TSource, IEnumerable<TResult>> selector
)

使用示例

准备测试类和初始代码

    /// <summary>/// 设备/// </summary>public class Device{public int Id { get; set; }public string Name { get; set; }public List<Point> Points { get; set; }public Device(){Points = new List<Point>();}}/// <summary>/// 状态点位/// </summary>public class Point{public string PointId { get; set; }public string Name { get; set; }public int Value { get; set; }}//数据初始化List<Device> list = new List<Device>();list.Add(new Device() { Id = 101, Name = "1号设备", });list.Add(new Device() { Id = 102, Name = "2号设备", });list.Add(new Device() { Id = 103, Name = "3号设备", });list.Add(new Device() { Id = 104, Name = "4号设备", });list[0].Points.Add(new Point { PointId = "101-1", Name = "测试1", Value = 50 });list[0].Points.Add(new Point { PointId = "101-2", Name = "测试2", Value = 50 });list[1].Points.Add(new Point { PointId = "102-3", Name = "测试3", Value = 50 });list[1].Points.Add(new Point { PointId = "102-4", Name = "测试4", Value = 50 });list[1].Points.Add(new Point { PointId = "102-1", Name = "测试1", Value = 20 });list[2].Points.Add(new Point { PointId = "103-2", Name = "测试2", Value = 3 });list[3].Points.Add(new Point { PointId = "104-3", Name = "测试3", Value = 40 });list[3].Points.Add(new Point { PointId = "104-4", Name = "测试4", Value = 40 });

使用:

  var points = list.SelectMany(x => x.Points);

在这里插入图片描述

返回一个Point 的集合,他将原集合中每个对象的一个子集合,合并成了一个集合

在这个例子中,SelectMany 对每个 Device 对象调用 Points 属性,产生一个 Point对象的序列。然后,SelectMany 将这些序列合并成一个单一的序列 allPoints,其中包含了所有的 Point对象。这样,你就可以遍历 allPoints并访问每个 Point对象的属性,而不需要关心它们属于哪个 Device

在这里插入图片描述

Select与SelectMany对比

对上述集合使用Select和SelectMany

    var points1 = list.Select(x => x.Points);var points2 = list.SelectMany(x => x.Points);

查看如下:可以看到Select是返回一个集合的集合,相当于是二维的集合,原有集合保持不变。

在这里插入图片描述

而SelectMany则是将各个子集合内容都添加到了同一个集合,这方便我们处理一些集合对象中 带有子集合的情况,可以直接获取到里面的所有对象,然后进行处理,省去了二次处理的麻烦。

在这里插入图片描述

结果对比:

在这里插入图片描述

特殊情况

SelectMany中必须返回集合对象IEnumerable<T>,普通类型或者类都无法使用,使用则会报错。

在这里插入图片描述

但是有一种特殊情况,string类型可以被使用,这种情况下他被视为字符串数组char[],所以返回的结果也是IEnumerable<char>,这种情况要注意,一般不会使用SelectMany,要获取属性的集合,就使用Select

在这里插入图片描述

在这里插入图片描述

相关文章:

C#开发-集合使用和技巧(六)特殊转换方法SelectMany的介绍和用法

介绍 SelectMany 方法在C#中用于将集合中的元素转换为其他类型的集合&#xff0c;并将这些集合扁平化为一个单一的序列。它是LINQ的一部分&#xff0c;允许你在一个序列上进行投影和过滤操作&#xff0c;然后将结果合并成一个序列。 方法定义 public static IEnumerable<…...

高考后的抉择:如何在心仪专业与知名学校之间做出选择?

目录 前言1. 专业选择的深度探讨1.1 专业的优势与挑战1.1.1 课程学习1.1.2 就业前景 1.2 专业选择的个人经验与思考 2. 名校对个人发展的长短期影响2.1 名校声誉的品牌效应2.1.1 职业发展2.1.2 社会认可度 2.2 教育资源与学术氛围2.2.1 教育资源2.2.2 学术氛围 2.3 就业优势 3.…...

黄仁勋提到的机器人世界,还需要AI数据来“调教” | CVPR 2024

本周&#xff0c;CVPR 2024正在美国西雅图拉开序幕。今年CVPR论文投稿数再次创下新纪录&#xff0c;可想而知本届会议的火热。 从研究主题来看&#xff0c;具身智能这一大热点值得关注。 黄仁勋在COMPUTEX大会开幕前夕的演讲中预言&#xff1a;AI的下一个浪潮将是物理AI。 即…...

语言中 函数用地址传参的好处

在C语言中&#xff0c;使用地址传参&#xff08;传递指针&#xff09;有以下几个好处&#xff1a; 1. **减少内存开销**&#xff1a; - 传递一个指针&#xff08;通常是一个地址&#xff09;比传递一个大的结构体或数组要高效得多&#xff0c;因为指针通常是一个固定大小&a…...

Python进阶二: NumPy基础:数组和矢量计算

二、NumPy基础&#xff1a;数组和矢量计算 本文源自微博客(www.microblog.store),且以获得授权 NumPy&#xff08;Numerical Python的简称&#xff09;是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。 NumPy的部分功能如下&#xf…...

2024北京智源大会开幕,智源推出大模型全家桶及全栈开源技术基座新版图,大模型先锋集结共探AGI之路

2024年6月14日&#xff0c;第六届“北京智源大会”在中关村展示中心开幕。 北京智源大会是智源研究院主办的“AI内行顶级盛会”&#xff0c;以“全球视野、思想碰撞、前沿引领”为特色&#xff0c;汇聚海内外研究者分享研究成果、探寻前沿知识、交流实践经验。2024北京智源大会…...

李光明从程序员到架构师的逆袭之路(三)

我&#xff0c;李光明&#xff0c;正在参加一个重要的技术会议。会场上&#xff0c;我们团队正在讨论着接口设计以及接口设计模式。我深知&#xff0c;一个好的接口设计应当遵循简洁、清晰、可扩展的原则。比如&#xff0c;在设计一个用户信息查询接口时&#xff0c;我们会定义…...

基于Spring Boot+VUE毕业生信息招聘平台

系统详细设计 1管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码、角色等信息进行系统登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入毕业生信息招聘平台可以查看首页、个人中心、企业管理、空中宣讲会管理、招聘岗位管理、毕业生管理、个…...

设计模式-创建型-04-建造者模式

1、盖房项目需求 1&#xff09;需要建房子&#xff1a;这一过程为打桩、砌墙、封顶2&#xff09;房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼&#xff0c;别墅&#xff0c;各种房子的过程虽然一样&#xff0c;但是要求不要相同的3&#xff09;请编写程序&#xf…...

jenkins中配置参数化,并在python脚本接收参数实现参数化执行

在公司内进行Monkey测试脚本集成jenkins时&#xff0c;因为需要指定公司内不同的app进行测试。那么可以有两种方法解决该问题&#xff0c;要么创建多个脚本文件&#xff0c;多个jenkins jobs&#xff0c;进行构建。要么可以在配置job时通过传参数的方式&#xff0c;在python脚本…...

【SCAU数据挖掘】数据挖掘期末总复习题库应用题及解析

1. 给定圆的半径为e &#xff0c;令 MinPts3&#xff0c;考虑下面两幅图。 &#xff08;1&#xff09;哪些对象是核心对象? m,p,o,r(因为这些核心对象在半径e的范围内都至少包含MinPts3个对象) &#xff08;2&#xff09;哪些对象是直接密度可达的? 对象q是…...

ADB->获取当前正在显示的Fragment和Activity的ADB命令

获取当前显示的Activity adb shell "dumpsys window | grep mCurrentFocus"指令拆解adb shell&#xff1a;启动一个远程shell来运行设备上的命令dumpsys window&#xff1a;获取当前窗口管理器的信息|&#xff1a;将前一个命令的输出作为后一个命令的输入grep mCurr…...

C#——集合List

list list集合和Arraylist基本一样&#xff0c;只不过list是C#2.0版本新加入的范型类型。list也可以通过索引操作里面的元素&#xff0c;也有对list进行增删改查 概念 Array静态数组 * Arraylist 动态数组 * list集合 * 1. Array是容量是固定的&#xff0c;但是ArrayList和…...

小程序-生命周期(2) 应用周期/页面周期

一.应用周期 应用周期指的是小程序&#xff1a;启动->运行->销毁的整个过程。 应用周期伴随一些函数来进行控制&#xff0c;这些函数卸载app.js里面的App方法里。 分别由onLaunch&#xff0c; onShow&#xff0c;onHide依次进行。 onLaunch&#xff1a;初始化的时候运行…...

什么是模板字符串?

模板字符串&#xff08;Template Literals&#xff09;是ES6&#xff08;ECMAScript 2015&#xff09;中引入的一种新的字符串表示方法&#xff0c;允许我们嵌入表达式&#xff0c;并在运行时将它们转换为字符串。模板字符串使用反引号&#xff08;&#xff09;来定义&#xff…...

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障&#xff1a; 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃&#xff0c;由于数据涉密&#xff0c;需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测&#xff0c;经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…...

微服务项目雪崩的解决思路

雪崩的介绍 雪崩是微服务中某个服务挂了&#xff0c;无法返回请求&#xff0c;导致调用改服务的上层服务也故障&#xff0c;最终形成连锁反应&#xff0c;导致整个系统故障。 解决思路 一般有四种思路&#xff1a; 1.最简单的就是超时处理&#xff0c;即超过一段时间就返回…...

汇编语言程序设计 - 新建一个文件:d:\abc.txt,从键盘输入文件的内容(不超过100个字符)

80x86汇编习题 题目描述&#xff1a;编写一个程序&#xff0c;新建一个文件&#xff1a;d:\abc.txt&#xff0c;从键盘输入文件的内容&#xff08;不超过100个字符&#xff09; 思路&#xff1a; 1&#xff0c;定义好文件名&#xff0c;记得末尾0 2&#xff0c;定义好缓冲区…...

【Linux】进程间通信2——命名管道

1. 命名管道(FIFO) 1.1. 基本概念 简单&#xff0c;给匿名管道起个名字就变成了命名管道 那么如何给 匿名管道 起名字呢&#xff1f; 结合文件系统&#xff0c;给匿名管道这个纯纯的内存文件分配 inode&#xff0c;将文件名与之构建联系&#xff0c;关键点在于不给它分配 D…...

语音翻译软件app排名来啦,这些工具让旅游畅通无阻

#这个夏天我们一定要去看海# 出国旅行时&#xff0c;语言障碍常常是最让人头疼的问题之一。 特别是在像缅甸这样英语并不普及的国家&#xff0c;基本的日常交流&#xff0c;比如用餐或问路&#xff0c;都可能成为难题。 然而&#xff0c;随着技术的进步&#xff0c;现在有了…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...