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;
}
//........添加
}