Enumerable#Zip 实现一下
时间:2022-04-26
本文章向大家介绍Enumerable#Zip 实现一下,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
早上看到“geff Zhang”介绍了Enumerable#Zip,闲来没事弄一个实现。
也谈不上思路,看了张兄的测试代码,先写了个简单的结构:
public static IEnumerable<TResult> Zip<TFirst, TSencond, TResult>(
this IEnumerable<TFirst> first,
IEnumerable<TSencond> sencond,
Func<TFirst, TSencond, TResult> func)
{
}
有了结构,实现就简单多了。张兄在文中介绍到“方法将第一个序列中的每个元素与第二个序列中有相同索引的元素合并。如果该序列不具有相同数目的元素,则直到它到达其中一个的末尾,该方法才合并序列。例如,如果一个序列有三个元素,另一个序列具有四个元素,那么结果序列将只有三个元素。”
要读到两个序列的各个元素,按照相同索引的元素,执行func,原先想想用foreach,for之类的,好像有点麻烦,为了简单,就直接转换成IEnumerator。
上代码,大家看了就明白了:
public static IEnumerable<TResult> Zip<TFirst, TSencond, TResult>(
this IEnumerable<TFirst> first,
IEnumerable<TSencond> sencond,
Func<TFirst, TSencond, TResult> func)
{
var firsttor = first.GetEnumerator();
var sencondtor = sencond.GetEnumerator();
while (firsttor.MoveNext())
{
if (sencondtor.MoveNext())
{
yield return func(firsttor.Current, sencondtor.Current);
}
}
}
随便写的,也没在意性能方面,等大家一起讨论下好了。
附上测试代码:
int[] numberic = new int[] { 1, 2, 3, 4 };
string[] words = new string[] { "a", "b", "c", "d" };
int[] numbericDiff = new int[] { 1, 2, 3 };
var result = numberic.Zip(words, (a, b) => a + " " + b);
foreach (var r in result)
{
Console.WriteLine(r);
}
result = numbericDiff.Zip(words, (a, b) => a + " " + b);
foreach (var r in result)
{
Console.WriteLine(r);
}
结果:
PS:推一个旅游网站,大家工作之余也要放松自己嘛。
- 【重磅】百度开源分布式深度学习平台,挑战TensorFlow (教程)
- WordPress评论ajax动态加载,解决静态缓存下评论不更新问题
- WordPress显示访客UA信息:Show UserAgent纯代码轻度汉化版
- WordPress开启颜色评论但不造成XSS漏洞的小方法
- WordPress强迫症技巧:让文章(ID)地址完美连续(障眼法)
- iOS内存管理:从MRC到ARC实践
- MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed
- PHP跨站脚本攻击(XSS)漏洞修复方法(一)
- Windows下获取网络连线实际名称,加强IP类设置脚本的兼容性
- Android APP 快速 Pad 化实现
- PHP彩蛋还是漏洞?expose_php彩蛋的触发和屏蔽方法
- 深入源码探索 ReactNative 通信机制
- PHP跨站脚本攻击(XSS)漏洞修复思路(二)
- WordPress发布文章自动同步到新浪微博(带特色图片)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法