Группирующий список карт во Flutter: подробное руководство с примерами

Во Flutter группировка списка карт — обычная операция, когда вам нужно классифицировать или организовать данные на основе определенных критериев. В этой статье представлены различные методы решения этой задачи, а также простые для понимания примеры кода. Итак, давайте углубимся и рассмотрим различные подходы к группировке списка карт во Flutter!

Метод 1: использование цикла и карты
Один простой метод группировки списка карт — это перебор списка и использование карты для хранения сгруппированных данных. Вот пример:

List<Map<String, dynamic>> dataList = [
  {'name': 'John', 'age': 25},
  {'name': 'Alice', 'age': 30},
  {'name': 'Bob', 'age': 25},
  {'name': 'Emma', 'age': 30},
];
Map<dynamic, List<Map<String, dynamic>>> groupedData = {};
for (var data in dataList) {
  var age = data['age'];
  if (groupedData.containsKey(age)) {
    groupedData[age].add(data);
  } else {
    groupedData[age] = [data];
  }
}
// Printing the grouped data
groupedData.forEach((key, value) {
  print('Age $key:');
  value.forEach((data) => print('${data['name']}'));
});

Метод 2: использование пакета коллекции
Пакет collectionв Dart предоставляет удобный метод groupBy, который можно использовать для группировки списка карт на основе конкретный ключ. Вот пример:

import 'package:collection/collection.dart';
List<Map<String, dynamic>> dataList = [
  {'name': 'John', 'age': 25},
  {'name': 'Alice', 'age': 30},
  {'name': 'Bob', 'age': 25},
  {'name': 'Emma', 'age': 30},
];
var groupedData = groupBy(dataList, (data) => data['age']);
// Printing the grouped data
groupedData.forEach((key, value) {
  print('Age $key:');
  value.forEach((data) => print('${data['name']}'));
});

Метод 3: использование метода расширения groupBy()
Вы также можете создать метод расширения, чтобы добавить функциональность groupByнепосредственно в класс Iterable. Это позволяет вам использовать метод groupByнепосредственно в списке. Вот пример:

extension GroupByExtension<T> on Iterable<T> {
  Map<K, List<T>> groupBy<K>(K Function(T) keySelector) {
    var map = <K, List<T>>{};
    for (var element in this) {
      var key = keySelector(element);
      if (!map.containsKey(key)) {
        map[key] = <T>[];
      }
      map[key]!.add(element);
    }
    return map;
  }
}
List<Map<String, dynamic>> dataList = [
  {'name': 'John', 'age': 25},
  {'name': 'Alice', 'age': 30},
  {'name': 'Bob', 'age': 25},
  {'name': 'Emma', 'age': 30},
];
var groupedData = dataList.groupBy((data) => data['age']);
// Printing the grouped data
groupedData.forEach((key, value) {
  print('Age $key:');
  value.forEach((data) => print('${data['name']}'));
});

В этой статье мы рассмотрели три различных метода группировки списка карт во Flutter. Вы можете выбрать подход, который соответствует вашим требованиям и стилю кодирования. Первый метод использует цикл и карту, второй метод использует функцию groupByпакета collection, а третий метод расширяет класс Iterableс помощью собственный метод расширения groupBy. Не стесняйтесь экспериментировать с этими методами и адаптировать их к своим конкретным случаям использования.

Помните, группировка данных — это фундаментальная операция манипулирования данными, и ее освоение значительно расширит ваши возможности как разработчика Flutter. Приятного кодирования!