예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <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;
             }
         }
     }
 }
예제 #3
0
            /// <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);
            }