binarySearchBy<E, K> function

int binarySearchBy<E, K>(
  1. List<E> sortedList,
  2. K keyOf(
    1. E element
    ),
  3. int compare(
    1. K,
    2. K
    ),
  4. K value, [
  5. int start = 0,
  6. int? end,
])

Implementation

int binarySearchBy<E, K>(
  List<E> sortedList,
  K Function(E element) keyOf,
  int Function(K, K) compare,
  K value, [
  int start = 0,
  int? end,
]) {
  end = RangeError.checkValidRange(start, end, sortedList.length);
  var min = start;
  var max = end;
  final key = value;
  while (min < max) {
    final mid = min + ((max - min) >> 1);
    final element = sortedList[mid];
    final comp = compare(keyOf(element), key);
    if (comp == 0) return mid;
    if (comp < 0) {
      min = mid + 1;
    } else {
      max = mid;
    }
  }
  return -min - 1;
}