diff --git a/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs b/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs index 7562592..8ae429e 100644 --- a/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs +++ b/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs @@ -331,6 +331,25 @@ namespace ICD.Common.Utils.Tests.Extensions Assert.AreEqual(8, items[2][1]); } + [Test] + public void GetAdjacentPairsTest() + { + IEnumerable a = new int[] {}; + Assert.AreEqual(0, a.GetAdjacentPairs().Count()); + + IEnumerable b = new int[] { 1 }; + Assert.AreEqual(0, b.GetAdjacentPairs().Count()); + + IEnumerable c = new int[] { 1, 2, 3 }; + int[][] cPairs = c.GetAdjacentPairs().ToArray(); + + Assert.AreEqual(2, cPairs.Length); + Assert.AreEqual(1, cPairs[0][0]); + Assert.AreEqual(2, cPairs[0][1]); + Assert.AreEqual(2, cPairs[1][0]); + Assert.AreEqual(3, cPairs[1][1]); + } + [Test] public void MinByTest() { diff --git a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs index 305708e..a2c3316 100644 --- a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs +++ b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs @@ -563,6 +563,27 @@ namespace ICD.Common.Utils.Extensions return output; } + /// + /// Given a sequence [A, B, C] returns a sequence [[A, B], [B, C]] + /// + /// + /// + /// + public static IEnumerable GetAdjacentPairs(this IEnumerable extends) + { + T previous = default(T); + bool first = true; + + foreach (T item in extends) + { + if (!first) + yield return new T[] {previous, item}; + + first = false; + previous = item; + } + } + /// /// Returns the minimal element of the given sequence, based on /// the given projection.