/// <summary> /// 通过[鼓舞类型]二分快速查表 /// </summary> /// <param name="inspireType">鼓舞类型</param> /// <returns></returns> public static IEnumerable <InspireDataBase> Query(this List <InspireDataBase> sorted, uint inspireType) { var key = new InspireDataBase() { inspireType = inspireType }; var comparer = new Comparer1(); var from = sorted.BinarySearch(key, comparer); if (from < 0) { yield break; } var to = from + 1; while (from > 0 && comparer.Compare(key, sorted[from - 1]) == 0) { from--; } while (to < sorted.Count && comparer.Compare(key, sorted[to]) == 0) { to++; } for (var i = from; i < to; i++) { yield return(sorted[i]); } }
/// <summary> /// 通过[鼓舞类型 + 次数]二分快速查表 /// </summary> /// <param name="inspireType">鼓舞类型</param> /// <param name="inspireIndex">次数</param> /// <returns></returns> public static InspireDataBase Query(this List <InspireDataBase> sorted, uint inspireType, uint inspireIndex) { var key = new InspireDataBase() { inspireType = inspireType, inspireIndex = inspireIndex }; var comparer = new Comparer2(); var index = sorted.BinarySearch(key, comparer); return(index >= 0 ? sorted[index] : default(InspireDataBase)); }