using System; using System.Collections.Generic; /// /// 选择委托:从T【 学生】中选择某个属性 Key【Age】 /// 返回这个属性的值 20 /// /// 数据类型:例如【 学生】 /// 数据类型的属性:例如【Age,Tall】 /// 数据类型的对象:例如【 张三】 /// 数据类型的属性的值 public delegate Key SelectHandler(T t); /// /// 查找委托 /// /// 数据类型 /// 数据类型的对象 /// 返回bool值 public delegate bool FindHandler(T t);// /// /// 数组助手类:工具类 提供通用方法,调用方便 /// public class ArrayHelper { /// ///1. 通用的升序排序的方法 /// /// 数据类型:例如【 学生】 /// 数据类型的属性:例如【Age,Tall】 /// 数据类型的数组:例如【很多学生】 /// 选择委托:例如 /// 从学生张三中选择某个属性 Age,返回这个属性的值 20 /// 升序排序的结果 public static T[] OrderBy(T[] arr, SelectHandler handler ) where Key:IComparable,IComparable { for (int i = 0; i < arr.Length - 1; i++) { for (int j = i + 1; j < arr.Length; j++) { //if (arr[i].CompareTo(arr[j]) > 0) if(handler(arr[i]).CompareTo(handler(arr[j]))>0) { T temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; } /// ///2. 通用的降序排序的方法 /// /// 数据类型:例如【 学生】 /// 数据类型的属性:例如【Age,Tall】 /// 数据类型的数组:例如【很多学生】 /// 选择委托:例如 /// 从学生张三中选择某个属性 Age,返回这个属性的值 20 /// 升序排序的结果 public static T[] OrderByDescending(T[] arr, SelectHandler handler) where Key : IComparable, IComparable { for (int i = 0; i < arr.Length - 1; i++) { for (int j = i + 1; j < arr.Length; j++) { //if (arr[i].CompareTo(arr[j]) > 0) if (handler(arr[i]).CompareTo(handler(arr[j])) < 0) { T temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; } /// /// 3. 通用的找最大的方法 /// /// 数据类型 /// 数据类型的属性 /// 数据类型的集合 /// 选择委托 /// public static T Max(T[] arr, SelectHandler handler) where Key : IComparable, IComparable { T temp = arr[0]; for (int i = 1; i < arr.Length ; i++) { if (handler(temp).CompareTo(handler(arr[i])) < 0) { temp = arr[i]; } } return temp; } /// /// 4. 通用的找最小的方法 /// /// 数据类型 /// 数据类型的属性 /// 数据类型的集合 /// 选择委托 /// public static T Min(T[] arr, SelectHandler handler) where Key : IComparable, IComparable { T temp = arr[0]; for (int i = 1; i < arr.Length; i++) { if (handler(temp).CompareTo(handler(arr[i])) > 0) { temp = arr[i]; } } return temp; } /// /// 查找Find,按照某个条件去查找,返回满足条件的一个 /// /// /// /// /// public static T Find(T[] arr, FindHandler handler) { for (int i = 0; i < arr.Length; i++) { if (handler(arr[i])) { return arr[i]; } } return default(T); } //查找所有FindAll、,按照某个条件去查找,返回满足条件的所有的。 public static T[] FindAll(T[] arr, FindHandler handler) { List list=new List(); for (int i = 0; i < arr.Length; i++) { if (handler(arr[i])) { list.Add(arr[i]);} } return list.ToArray(); } //从集合的每个对象提取某个属性的值 组成一个新的数组 // Select 多个学生 学生的成绩【60,70,50,100】 public static Key[] Select(T[] arr, SelectHandler handler) { Key[] keys = new Key[arr.Length]; for (int i=0;i /// 遍历集合A 取出未在集合B中出现过的元素 /// /// 类型 /// 待遍历查找的集合 /// 待排除元素的集合 /// 不存在的值 public static List GetAny(List listA, List listB) { List anyT = new List(); for (int i = 0; i < listA.Count; i++) { if (!listB.Contains(listA[i])) anyT.Add(listA[i]); } return anyT; } /// /// 查找Find,按照某个条件去查找,返回满足条件的一个 /// /// /// /// /// public static T Find(List arr, FindHandler handler) { for (int i = 0; i < arr.Count; i++) { if (handler(arr[i])) { return arr[i]; } } return default(T); } public static T Min(List arr, SelectHandler handler) where Key : IComparable, IComparable { T temp = arr[0]; for (int i = 1; i < arr.Count; i++) { if (handler(temp).CompareTo(handler(arr[i])) > 0) { temp = arr[i]; } } return temp; } //........添加 }