/// <summary> /// 选择数组中的某类成员形成单独的数组 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <typeparam name="Tkey">数据类型的某个成员类型</typeparam> /// <param name="array">数据类型的对象数组</param> /// <param name="handler">选择委托</param> /// <returns></returns> public static Tkey[] Select <T, Tkey>(T[] array, SelectHandle <T, Tkey> handler) { Tkey[] arr = new Tkey[array.Length]; for (int i = 0; i < array.Length; i++) { arr[i] = handler(array[i]); } return(arr); }
/// <summary> /// 获取数组最大最小值对象 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <typeparam name="Tkey">数据类型属性</typeparam> /// <param name="array">数据类型对象数组</param> /// <param name="handler">选择委托</param> /// <param name="isMin">是否最小值,默认最大值</param> /// <returns></returns> public static T GetBy <T, Tkey>(T[] array, SelectHandle <T, Tkey> handler, bool isMin = false) where Tkey : IComparable <Tkey> { T max = array[0]; int parable = isMin ? 1 : -1; for (int i = 1; i < array.Length; i++) { if (handler(max).CompareTo(handler(array[i])) == parable) { max = array[i]; } } return(max); }
/// <summary> /// 数组排序 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <typeparam name="Tkey">数据类型属性</typeparam> /// <param name="array">数据类型的对象数组</param> /// <param name="handler">选择委托</param> /// <param name="isReverse">是否反转,默认升序排列</param> public static void OrderBy <T, Tkey>(T[] array, SelectHandle <T, Tkey> handler, bool isReverse = false) where Tkey : IComparable <Tkey> { for (int i = 0; i < array.Length - 1; i++) { for (int j = i + 1; j < array.Length; j++) { if (handler(array[i]).CompareTo(handler(array[j])) > 0) { var temp = array[i]; array[i] = array[j]; array[j] = temp; } } } if (isReverse) { Array.Reverse(array); } }