Grouping accumulates records under a shared key.

Program

Play the program to count orders by region, optionally filtering to open orders.

group_regions.dart
void main() {
  var orders = [
    {'region': 'east', 'status': 'open'},
    {'region': 'west', 'status': 'open'},
    {'region': 'west', 'status': 'closed'},
  ];
  var statusFilter = ;
  var counts = <String, int>{};
  for (var order in orders) {
    if (statusFilter != 'all' && order['status'] != statusFilter) continue;
    var region = order['region']!;
    counts[region] = (counts[region] ?? 0) + 1;
  }
  print('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(";")}');
}
void main() {
  var orders = [
    {'region': 'east', 'status': 'open'},
    {'region': 'west', 'status': 'open'},
    {'region': 'west', 'status': 'closed'},
  ];
  var statusFilter = ;
  var counts = <String, int>{};
  for (var order in orders) {
    if (statusFilter != 'all' && order['status'] != statusFilter) continue;
    var region = order['region']!;
    counts[region] = (counts[region] ?? 0) + 1;
  }
  print('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(";")}');
}
map literal `<String, int>{}` creates a typed empty map.
null fallback `counts[region] ?? 0` supplies zero for a new group.
entries.map Mapping entries creates display strings for each group.