.Net Tips — Use LINQ to create pairs of adjacent elements from a collection

Yan Cui
theburningmonk.com
Published in
1 min readJun 7, 2011

Suppose you have an array of numbers, say, [1, 3, 5, 7, 9, …], and you want to pair each element up with its neighbour in the array, e.g. [[1, 3], [3, 5], [5, 7], [7, 9], …].

Sure, you can iterate through the indices of the elements and recursively grab the element at an index and its neighbour:

1: // an array of odd numbers2: var arr = new[] { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };3:4: // standard imperative way, iterate through the indices and grab5: // the elements from the arrays6: var arrPairs = new List<int[]>();7: for (var i = 0; i < arr.Length - 1; i++)8: {9:     arrPairs.Add(new[] { arr[i], arr[i+1] });10: }

OR, you can use LINQ and the Zip method added in .Net 4 and do this instead:

1: var arrPairsLinq = arr.Skip(1).Zip(arr, (second, first) => new[] { first, second }).ToArray();

A much more elegant solution, no? ;-)

--

--

Yan Cui
theburningmonk.com

AWS Serverless Hero. Follow me to learn practical tips and best practices for AWS and Serverless.