/// <summary> /// 获取最大值 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="K"></typeparam> /// <param name="array"></param> /// <param name="handler"></param> /// <returns></returns> public static T Max <T, K>(T[] array, CFResultAction <T, K> handler) where K : IComparable <K> { T temp = default(T); temp = array[0]; foreach (var arr in array) { if (handler(temp).CompareTo(handler(arr)) < 0) { temp = arr; } } return(temp); }
/// <summary> /// 降序排序 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="K"></typeparam> public static void SortByDescending <T, K>(T[] array, CFResultAction <T, K> handler) where K : IComparable <K> { for (int i = 0; i < array.Length; i++) { for (int j = 0; j < array.Length; j++) { if (handler(array[i]).CompareTo(handler(array[j])) > 0) { T temp = array[i]; array[i] = array[j]; array[j] = temp; } } } }
/// <summary> /// 泛型二分查找,需要传入升序数组 /// </summary> /// <returns>返回对象在数组中的序号,若不存在,则返回-1</returns> public static int BinarySearch <T, K>(T[] array, K target, CFResultAction <T, K> handler) where K : IComparable <K> { int first = 0; int last = array.Length - 1; while (first <= last) { int mid = first + (last - first) / 2; if (handler(array[mid]).CompareTo(target) > 0) { last = mid - 1; } else if (handler(array[mid]).CompareTo(target) < 0) { first = mid + 1; } else { return(mid); } } return(-1); }