groupBy method

Map<dynamic, CsvTable> groupBy(
  1. String column
)

Group rows by a column's value. Returns Map<value, CsvTable>.

Implementation

Map<dynamic, CsvTable> groupBy(String column) {
  final idx = headers.indexOf(column);
  if (idx < 0) throw CsvException('Column "$column" not found');

  final groups = <dynamic, List<List<dynamic>>>{};
  for (final row in rawData) {
    final key = idx < row.length ? row[idx] : null;
    (groups[key] ??= []).add(List<dynamic>.from(row));
  }

  return groups.map(
    (key, rows) =>
        MapEntry(key, CsvTable.internal(List<String>.from(headers), rows)),
  );
}