.Net Tips — Use LINQ to create pairs of adjacent elements from a collection
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? ;-)