【譯】使用 LINQ 合併 IEnumerable 序列
阿新 • • 發佈:2019-01-12
Zip 方法允許把序列中的元素通過交織將 IEnumerable 序列連線在一起。
Zip 是一種基於 IEnumerable 的擴充套件方法。
例如,將具有年齡的名稱集合壓縮在一起:
var names = new[] { "John", "Sarah", "Amrit" }; var ages = new[] { 22, 58, 36 }; var namesAndAges = names.Zip(ages, (name, age) => name + " " + age);
將會生成包含三個元素的 IEnumerable <string>:
如果一個序列比另一個序列短,當到達較短序列的末尾時,“壓縮”將會停止。因此,如果添加了一個額外的名稱“Bob”:
var names = new [] {"John", "Sarah", "Amrit", "Bob"};
結果會和之前一樣,“Bob”不會被使用,因為並沒有與之匹配的年齡。
Lambdas 也可用於建立物件;下面的示例演示如何建立一個攜帶兩個元素組成元組的 IEnumerable 物件。
兩個元素的元組的列舉:
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> 物件,它包含三個元組,每個元組都包含一個名稱和年齡。
《C# Tips》Merging IEnumerable Sequences with LINQ