IEnumerable 、 IEnumerator,yield return

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自定义迭代类

》》》using System.Collections;
在这里插入图片描述

using System.Collections;
using System.Runtime.CompilerServices;namespace ConsoleApp1
{// 可迭代对象 标记此类可迭代 继承IEnumerable  类是可以迭代public class SpecificEnumerable : IEnumerable{private readonly object[] _dataSource;public SpecificEnumerable(object[] values){_dataSource = values;}public IEnumerator GetEnumerator(){return new SpecificEnumerator(_dataSource);}// 迭代器 工作引擎internal class SpecificEnumerator : IEnumerator{private int _position; // 指针private readonly object[] _data; // 数据源public SpecificEnumerator(object[] data){_position = -1;_data = data;}public bool MoveNext(){if (_position != _data.Length){_position++;}return _position >= 0 && _position < _data.Length;}public void Reset(){_position = -1;}public object Current{get{if (_position == -1 || _position == _data.Length){throw new IndexOutOfRangeException();}return _data[_position];}}}}class Program{static void Main(string[] args){#region 自定义可枚举类var myEnumerable = new SpecificEnumerable(new object[]{"A", "B", "C", "D"});foreach (var item in myEnumerable){Console.WriteLine(item);}Console.WriteLine("=========================>");var myEnumerator = myEnumerable.GetEnumerator();while (myEnumerator.MoveNext()){Console.WriteLine(myEnumerator.Current);}#endregion}}}
用yield return

在这里插入图片描述

using System.Collections;
using System.Runtime.CompilerServices;namespace ConsoleApp1
{public class SpecificYieldEnumerable : IEnumerable{private readonly Random _random = new();private readonly int _capacity;public SpecificYieldEnumerable(int count){_capacity = count;}public IEnumerator GetEnumerator(){for (var i = 0; i < _capacity; i++){yield return _random.Next(100);}}}class Program{static void Main(string[] args){var myEnumerable = new SpecificYieldEnumerable(10);foreach (var item in myEnumerable){Console.WriteLine(item);}Console.WriteLine("=================>");var myEnumerator = myEnumerable.GetEnumerator();while (myEnumerator.MoveNext()){Console.WriteLine(myEnumerator.Current);}}}}

针对整个集合中的每一个元素执行操作,那么程序的效率会很低。
把通用的IEnumerable或针对某种类型的IEnumerable设计成方法的输入及输出参数是一种比较少见的思路,因此,很多开发者都不会这样去做,但是这种思路确实能带来很多好处。
迭代器方法会等调用方真正用到某个元素时才去执行相应的代码,与传统的命令式方法相比,这种延迟执行(deferred execution,机制可以降低算法所需的存储空间,并使算法的各个部分之间能够更为灵活地拼接起来

迭代器方法真正强大之处在于它可以把多个步骤拼接成一整套流程。
如果能把复杂的算法拆解成多个步骤,并把每个步骤都表示成这种小型的迭代器方法,
那么就可以将这些方法拼成一条管道,使得程序只需把源序列处理一遍即可对其中的元素执行许多种小的变换。
就好比 循环计算 ,每次都计算结果,在把结果跟下一个数进行计算。
int result=0;
for(int i=1;i<100;i++)
{
result +=i;
}
迭代器 是 1+2+3.。。。。99 一起计算的。 效率比较高

// 为了演示迭代器方法的好处,笔者先举一个简单的例子,然后用迭代器方法改写。 
public static void Unique(IEnumerable<int> nums)
{var uniqueVals = new HashSet<int>(); foreach(var num in nums){if(!uniqueVals.Contains(num)){uniqueVals.Add(num);Console.WriteLine(num); }}
}// 为此,可以考虑改用迭代器方法来实现:
public static IEnumerable<int> UniqueV2(IEnumerable<int> nums)
{var uniqueVals = new HashSet<int>();foreach (var num in nums){if (!uniqueVals.Contains(num)){uniqueVals.Add(num);yield return num; }}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG 高级应用:基于 Nougat、HTML 转换与 GPT-4o 解析复杂 PDF 内嵌表格

一、前言 RAG&#xff08;检索增强生成&#xff09;应用最具挑战性的方面之一是如何处理复杂文档的内容&#xff0c;例如 PDF 文档中的图像和表格&#xff0c;因为这些内容不像传统文本那样容易解析和检索。前面我们有介绍过如何使用 LlamaIndex 提供的 LlamaParse 技术解析复…

GD32F103RCT6/GD32F303RCT6(10)独立看门狗/窗口看门狗实验

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

集合的综合练习

自动点名器1&#xff1a;班级里有N个学生&#xff0c;实现随机点名器 public class test {public static void main(String [] args) {ArrayList<String> listnew ArrayList<>();//创建一个集合//在集合中添加元素Collections.addAll(list, "李明",&quo…

MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

一、找不到my.ini配置文件 MySQL 8 安装或启动过程中&#xff0c;如果系统找不到my.ini文件&#xff0c;通常意味着 MySQL服务器没有找到其配置文件。在Windows系统上&#xff0c;MySQL 8 预期使用my.ini作为配置文件&#xff0c;而不是在某些情况下用到的my.cnf文件。 通过 …

常用的优化器汇总及keras实现

1.SGD&#xff08;Stochastic Gradient Descent&#xff09; 2.RMSprop&#xff08;Root Mean Square Propagation&#xff09; 3.Adadelta 4.Adam&#xff08;Adaptive Moment Estimation&#xff09; 5.Nadam 6.代码实现 from sklearn.compose import make_column_transforme…

Java----Maven详解

前言 Maven是Java项目的构建工具&#xff0c;通过项目对象模型&#xff08;POM&#xff09;管理项目配置信息&#xff0c;自动化构建、测试和部署过程。开发人员可定义项目结构、依赖和构建流程&#xff0c;提高开发效率和质量。本文介绍基本概念和用法&#xff0c;帮助您更好…

文本生成流程图 泰酷啦 Excalidraw Mermaid Obsidian

前言 介绍一个很酷的工具&#xff0c;Mermaid to Excalidraw 。作用是用代码生成流程图。 Mermaid 是一款强大的、轻量级的文本到图表的转换工具&#xff0c;它允许用户使用简单的Markdown风格的语法编写文本描述&#xff0c;然后通过JavaScript引擎将其转换成美观的图表。Mer…

vue3 vite title 页面标题设置

效果图&#xff1a; 1. 安装 vite-plugin-html 插件 npm install vite-plugin-html -D2. 修改 vite.config.js import {defineConfig, loadEnv} from vite import { createHtmlPlugin } from "vite-plugin-html" import {resolve} from path import vue from vitej…

生成随机数值与二维数组的探索之旅

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、随机数生成的策略 三、实现过程与代码案例 四、注意事项与扩展讨论 一、引言…

el-image本地图片不显示,提示加载失败

问题描述&#xff1a;el-image使用本地图片不显示&#xff0c;提示加载失败。 <el-image src"../../assets/img/value.png"></el-image> 解决方法&#xff1a;src用里面加个require&#xff0c;注意给 src 属性加: <el-image :src"require(../..…

Mac在docker可视化界面上安装主流数据库

前言 篇幅有点长&#xff0c;大家可以打开目录快速跳转到想要的数据库即可&#xff01; 虽然说用命令行会显得我们更加专业一些&#xff0c;但对于我英语水平不怎么好的人来说&#xff0c;毕竟命令多又长&#xff0c;还不好记。我个人是喜欢复杂问题简单化&#xff0c;踩了很多…

今日好料推荐(大数据湖体系规划)

今日好料推荐&#xff08;大数据湖体系规划&#xff09; 参考资料在文末获取&#xff0c;关注我&#xff0c;获取优质资源。 大数据湖体系规划 一、大数据湖简介 大数据湖&#xff08;Data Lake&#xff09;是一个集中式的存储库&#xff0c;用于存储来自各种来源的结构化和…

「读书感悟」我们为什么要睡觉?

书名&#xff1a;我们为什么要睡觉&#xff1f; 作者&#xff1a;马修沃克 我觉得这是一本每个人都必须看的书&#xff0c;尤其是在如今卷上天的社会&#xff0c;部分人沉迷于学习工作&#xff0c;经常奋斗到半夜甚至通宵&#xff0c;更有甚者会有&#xff1a;“睡觉是在…

创建特定结构的二维数组:技巧与示例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;二维数组的奇妙世界 二、方法一&#xff1a;直接初始化 1. 初始化一个…

利润而不是损失:谁信任你的游戏本地化

中国游戏市场巨大且前景广阔。这尤其适用于移动游戏&#xff1a;Statista预测&#xff0c;2024年。它的收入将达到346.6亿美元。然而&#xff0c;这种巨大的财务潜力也有其反面&#xff1a;游戏进入市场的次数越多&#xff0c;它们就越难以相互争夺玩家的注意力。此外&#xff…

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从&#xff0c;俩哨兵&#xff0c;准备两台服务器&#xff0c;分别安装docker 我这里有两台centos服务器 主服务器IP&#xff1a;192.168.252.134 从服务器IP&#xff1a;192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…

Nginx配置及优化

Nginx配置及优化 前言nginx.conf拆分理解上线 最近在配置Nginx的时候&#xff0c;偶尔一些细致的理论有些模糊&#xff0c;配置起来费了点功夫&#xff0c;今天来详细写一下我个人的理解&#xff0c;文章参考了一些官网和其他优秀博主的文章http://t.csdnimg.cn/GbID9。 前言 …

一款免费的软件媒体系统软件!!【送源码】

Jellyfin是一个免费的软件媒体系统&#xff0c;让您在管理和流媒体控制您的媒体。它是专有的Emby和Plex的替代品&#xff0c;通过多个应用程序从专用服务器向最终用户设备提供媒体。Jellvfin是Emby的3.5.2版本的后裔&#xff0c;并被移植到.NETCore框架中&#xff0c;以实现完全…

安卓赤拳配音v1.0.2Ai配音神器+百位主播音色

Ai配音神器 本人自用版本&#xff01;超级稳定&#xff01;百位主播音色 登陆即可用 链接&#xff1a;https://pan.baidu.com/s/1WVsrYZqLaPAriHMMLMdPBg?pwdz9ru 提取码&#xff1a;z9ru

Linux: network: tcp spurious retrans 的一个原因

最近分析问题的时候&#xff0c;从wireshark里看有&#xff1a;tcp spurious retrans 的包&#xff0c;309这个是307 的retransmission&#xff0c;而且在308 回复了ACK。那为什么会重传&#xff1f; 从网上找了一些&#xff0c;比如 https://www.packetsafari.com/blog/2021…