import { AccumulatorMap } from './AccumulatorMap.js';

/**
 * Groups array items into a Map, given a function to produce grouping key.
 */
export function groupBy<K, T>(
  list: ReadonlyArray<T>,
  keyFn: (item: T) => K,
): Map<K, ReadonlyArray<T>> {
  const result = new AccumulatorMap<K, T>();
  for (const item of list) {
    result.add(keyFn(item), item);
  }
  return result;
}