Zip 方法容许把序列中的元素经过交织将 IEnumerable 序列链接在一块儿。
Zip 是一种基于 IEnumerable 的扩展方法。
例如,将具备年龄的名称集合压缩在一块儿:javascript
var names = new[] { "John", "Sarah", "Amrit" }; var ages = new[] { 22, 58, 36 }; var namesAndAges = names.Zip(ages, (name, age) => name + " " + age);
将会生成包含三个元素的 IEnumerable <string>:php
若是一个序列比另外一个序列短,当到达较短序列的末尾时,“压缩”将会中止。所以,若是添加了一个额外的名称“Bob”:java
var names = new [] {"John", "Sarah", "Amrit", "Bob"};
结果会和以前同样,“Bob”不会被使用,由于并无与之匹配的年龄。
Lambdas 也可用于建立对象;下面的示例演示如何建立一个携带两个元素组成元组的 IEnumerable 对象。
两个元素的元组的枚举:spa
var names = new[] { "John", "Sarah", "Amrit" }; var ages = new[] { 22, 58, 36 }; var namesAndAges = names.Zip(ages, (name, age) => Tuple.Create(name, age));
这将产生一个 IEnumerable<Tuple<String, Int32> 对象,它包含三个元组,每一个元组都包含一个名称和年龄。code
书名:《C# Tips》
章节:Merging IEnumerable Sequences with LINQ
网址:https://leanpub.com/cstipsorm