findNearest method

dynamic findNearest(
  1. T element,
  2. List<T> array,
  3. bool exact
)

Find nearest element index

Implementation

dynamic findNearest(T element, List<T> array, bool exact) {
  var diff = 0;
  var start = 0;
  var pivot = 0;
  var found = false;
  var end = array.length - 1;

  while (start <= end) {
    pivot = ((start + end) / 2).roundToDouble().toInt();
    diff = compare(array[pivot], element);
    if (diff < 0) {
      start = pivot + 1;
    } else if (diff > 0) {
      end = pivot - 1;
    } else {
      found = true;
      break;
    }
  }

  if (found) {
    return {'idx': pivot, 'exact': true};
  }

  if (exact) {
    return {'idx': -1};
  }

  // Not exact - insertion point
  return {'idx': diff < 0 ? pivot + 1 : pivot};
}