Soporte nativo de C # para verificar si un IEnumerable está ordenado?
¿Hay algún soporte de LINQ para comprobar si unIEnumerable<T>
está ordenado? Tengo una enumerable que quiero verificar que esté ordenada en orden no descendente, pero parece que no puedo encontrar soporte nativo para ella en C #.
He escrito mi propio método de extensión utilizandoIComparables<T>
:
public static bool IsSorted<T>(this IEnumerable<T> collection) where T : IComparable<T>
{
Contract.Requires(collection != null);
using (var enumerator = collection.GetEnumerator())
{
if (enumerator.MoveNext())
{
var previous = enumerator.Current;
while (enumerator.MoveNext())
{
var current = enumerator.Current;
if (previous.CompareTo(current) > 0)
return false;
previous = current;
}
}
}
return true;
}
Y uno usando unIComparer<T>
objeto:
public static bool IsSorted<T>(this IEnumerable<T> collection, IComparer<T> comparer)
{
Contract.Requires(collection != null);
using (var enumerator = collection.GetEnumerator())
{
if (enumerator.MoveNext())
{
var previous = enumerator.Current;
while (enumerator.MoveNext())
{
var current = enumerator.Current;
if (comparer.Compare(previous, current) > 0)
return false;
previous = current;
}
}
}
return true;
}