1.工具类
public static class ListExtensions
{
/// <summary>
/// 无序或有序的ListT获取所有匹配对象的方法
/// </summary>
public static IEnumerable<T> GetAll<T>(this List<T> list, T searchValues)
{
return list.Where(p => p.Equals(searchValues));
}
/// <summary>
/// 无序或有序的ListT获取所有匹配对象次数的方法
/// </summary>
public static int CountAll<T>(this List<T> list, T searchValues)
{
return list.GetAll(searchValues).Count();
}
/// <summary>
/// 有序的ListT获取所有匹配对象的方法,要求List必须是有序的,否则返回的结果是错误的
/// </summary>
public static T[] BinarySearchGetAll<T>(this List<T> list, T searchValues)
{
List<T> result = new List<T>();
//查找符合条件的第一个元素
int center = list.BinarySearch(searchValues);
if (center > 0)
{
//添加入结果集合
result.Add(list[center]);
//往左查找
int left = center;
while (left > 0 && list[left - 1].Equals(searchValues))
{
left -= 1;
result.Add(list[left]);
}
//往右查找
int right = center;
while (right < list.Count - 1 && list[right + 1].Equals(searchValues))
{
right += 1;
result.Add(list[right]);
}
}
return result.ToArray();
}
/// <summary>
/// 有序的ListT获取所有匹配对象次数的方法,要求List必须是有序的,否则返回的结果是错误的
/// </summary>
public static int BinarySearchCountAll<T>(this List<T> list, T searchValues)
{
return list.BinarySearchGetAll(searchValues).Length;
}
}