Util method for getting a sequence as a series of adjacent pairs

This commit is contained in:
Chris Cameron
2017-09-12 16:52:11 -04:00
parent 3dc7f3bf78
commit cc984e718f
2 changed files with 40 additions and 0 deletions

View File

@@ -331,6 +331,25 @@ namespace ICD.Common.Utils.Tests.Extensions
Assert.AreEqual(8, items[2][1]);
}
[Test]
public void GetAdjacentPairsTest()
{
IEnumerable<int> a = new int[] {};
Assert.AreEqual(0, a.GetAdjacentPairs().Count());
IEnumerable<int> b = new int[] { 1 };
Assert.AreEqual(0, b.GetAdjacentPairs().Count());
IEnumerable<int> 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()
{

View File

@@ -563,6 +563,27 @@ namespace ICD.Common.Utils.Extensions
return output;
}
/// <summary>
/// Given a sequence [A, B, C] returns a sequence [[A, B], [B, C]]
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="extends"></param>
/// <returns></returns>
public static IEnumerable<T[]> GetAdjacentPairs<T>(this IEnumerable<T> 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;
}
}
/// <summary>
/// Returns the minimal element of the given sequence, based on
/// the given projection.