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; } }
|
请发表评论