```csharp public static class ListExtensions { /// /// 在无序或有序的 List 中查找所有与指定值匹配的对象。 /// public static IEnumerable FindAll(this List list, T searchValue) { return list.Where(item => item.Equals(searchValue)); }
/// /// 计算无序或有序的 List 中与指定值匹配的对象数量。 /// public static int CountMatches(this List list, T searchValue) { return list.FindAll(searchValue).Count(); }
/// /// 在有序的 List 中查找所有与指定值匹配的对象。此方法要求列表已排序,否则结果可能不正确。 /// public static T[] BinarySearchFindAll(this List list, T searchValue) where T : IComparable { var results = new List(); int index = list.BinarySearch(searchValue); if (index >= 0) { results.Add(list[index]); // 向左搜索 for (int i = index - 1; i >= 0 && list[i].CompareTo(searchValue) == 0; i--) { results.Add(list[i]); } // 向右搜索 for (int i = index + 1; i { results.Add(list[i]); } } return results.ToArray(); }
/// /// 计算有序的 List 中与指定值匹配的对象数量。此方法要求列表已排序,否则结果可能不正确。 /// public static int BinarySearchCountMatches(this List list, T searchValue) where T : IComparable { return list.BinarySearchFindAll(searchValue).Length; } } ```