Собственная поддержка C # для проверки сортировки IEnumerable?
Есть ли поддержка LINQ для проверки, еслиIEnumerable<T>
отсортировано? У меня есть перечисляемое, которое я хочу проверить, отсортировано в нисходящем порядке, но я не могу найти нативную поддержку для этого в C #.
Я написал свой собственный метод расширения, используяIComparables<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;
}
И один с помощьюIComparer<T>
объект:
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;
}