export function findKeyByIndex<K, V>(
  map: Map<K, V>,
  index: number,
): K | undefined {
  if (index < 0) {
    return undefined;
  }
  const it = map.keys();
  for (;;) {
    const res = it.next();
    if (res.done) {
      return undefined;
    }
    if (index <= 0) {
      return res.value;
    }
    --index;
  }
}

export function entriesToArray<K, V>(map: Map<K, V>): Array<[K, V]> {
  const result: Array<[K, V]> = [];
  map.forEach((value, key) => {
    result.push([key, value]);
  });
  return result;
}

export function getOrElse<K, V>(map: Map<K, V>, key: K, value: V) {
  return map.has(key) ? map.get(key) ?? value : value;
}
