/// <summary> /// Returns the minimum value in the enumerable sequence by using the specified comparer to compare values. /// </summary> /// <typeparam name="TSource">Source sequence element type.</typeparam> /// <param name="source">Source sequence.</param> /// <param name="comparerFactory">The definition of a comparer to compare elements.</param> public static TSource Min <TSource>(this IEnumerable <TSource> source, Func <CompareSource <TSource>, IFullComparer <TSource> > comparerFactory) { var comparer = comparerFactory(CompareSource.For <TSource>()); return(source.Min(comparer)); }
/// <summary> /// Returns the elements with the minimum key value by using the specified comparer to compare key values. /// </summary> /// <typeparam name="TSource">Source sequence element type.</typeparam> /// <typeparam name="TKey">Key type.</typeparam> /// <param name="source">Source sequence.</param> /// <param name="keySelector">Key selector used to extract the key for each element in the sequence.</param> /// <param name="comparerFactory">The definition of a comparer to compare keys.</param> public static IList <TSource> MinBy <TSource, TKey>(this IEnumerable <TSource> source, Func <TSource, TKey> keySelector, Func <CompareSource <TKey>, IFullComparer <TKey> > comparerFactory) { var comparer = comparerFactory(CompareSource.For <TKey>()); return(source.MinBy(keySelector, comparer)); }
/// <summary> /// Performs a subsequent ordering of the elements in a sequence in descending order by using a specified comparer. /// </summary> /// <typeparam name="T">The type of the elements of <paramref name="source"/>.</typeparam> /// <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam> /// <param name="source">A sequence of values to order.</param> /// <param name="keySelector">A function to extract a key from an element.</param> /// <param name="comparerFactory">The definition of a comparer to compare keys.</param> public static IOrderedEnumerable <T> ThenByDescending <T, TKey>(this IOrderedEnumerable <T> source, Func <T, TKey> keySelector, Func <CompareSource <TKey>, IFullComparer <TKey> > comparerFactory) { var comparer = comparerFactory(CompareSource.For <TKey>()); return(source.ThenByDescending(keySelector, comparer)); }
/// <summary> /// Sorts the elements of a sequence in ascending order by using a specified comparer. /// </summary> /// <typeparam name="T">The type of the elements of <paramref name="source"/>.</typeparam> /// <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam> /// <param name="source">A sequence of values to order.</param> /// <param name="keySelector">A function to extract a key from an element.</param> /// <param name="comparerFactory">The definition of a comparer to compare keys.</param> public static IOrderedEnumerable <T> OrderBy <T, TKey>(this IEnumerable <T> source, Func <T, TKey> keySelector, Func <CompareSource <TKey>, IFullComparer <TKey> > comparerFactory) { var comparer = comparerFactory(CompareSource.For <TKey>()); return(source.OrderBy(keySelector, comparer)); }
/// <summary> /// Performs a subsequent ordering of the elements in a sequence in ascending order by using a specified comparer. /// </summary> /// <typeparam name="T">The type of the elements of <paramref name="source"/>.</typeparam> /// <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam> /// <param name="source">A sequence of values to order.</param> /// <param name="keySelector">A function to extract a key from an element.</param> /// <param name="comparerFactory">The definition of a comparer to compare keys.</param> /// <param name="descending">A value indicating whether the sorting is done in descending order. If <c>false</c> (the default), then the sort is in ascending order.</param> public static IOrderedEnumerable <T> ThenBy <T, TKey>(this IOrderedEnumerable <T> source, Func <T, TKey> keySelector, Func <CompareSource <TKey>, IFullComparer <TKey> > comparerFactory, bool descending = false) { var comparer = comparerFactory(CompareSource.For <TKey>()); return(source.ThenBy(keySelector, descending ? comparer.Reverse() : comparer)); }
/// <summary> /// Invokes a transform function on each element of a sequence and returns the minimum value according to the specified comparer. /// </summary> /// <typeparam name="TSource">The type of the elements in the source sequence.</typeparam> /// <typeparam name="TResult">The type of the objects derived from the elements in the source sequence to determine the minimum of.</typeparam> /// <param name="source">An observable sequence to determine the mimimum element of.</param> /// <param name="selector">A transform function to apply to each element.</param> /// <param name="comparerFactory">The definition of a comparer to compare elements.</param> public static IObservable <TResult> Min <TSource, TResult>(this IObservable <TSource> source, Func <TSource, TResult> selector, Func <CompareSource <TResult>, IFullComparer <TResult> > comparerFactory) { var comparer = comparerFactory(CompareSource.For <TResult>()); return(source.Min(selector, comparer)); }
/// <summary> /// Returns the maximum value in an observable sequence according to the specified comparer. /// </summary> /// <typeparam name="TSource">The type of the elements in the source sequence.</typeparam> /// <param name="source">An observable sequence to determine the maximum element of.</param> /// <param name="comparerFactory">The definition of a comparer to compare elements.</param> public static IObservable <TSource> Max <TSource>(this IObservable <TSource> source, Func <CompareSource <TSource>, IFullComparer <TSource> > comparerFactory) { var comparer = comparerFactory(CompareSource.For <TSource>()); return(source.Max(comparer)); }