首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在dart中按多个值对列表进行分组

在Dart中,可以使用groupBy函数来按多个值对列表进行分组。

groupBy函数是一个自定义的扩展方法,可以将列表中的元素按照指定的多个属性值进行分组。以下是一个示例代码:

代码语言:txt
复制
extension GroupByExtension<T> on Iterable<T> {
  Map<String, List<T>> groupBy(List<String> properties) {
    Map<String, List<T>> result = {};

    for (var element in this) {
      String key = '';
      for (var property in properties) {
        key += element[property].toString();
      }

      if (!result.containsKey(key)) {
        result[key] = [];
      }
      result[key]!.add(element);
    }

    return result;
  }
}

void main() {
  List<Map<String, dynamic>> data = [
    {'name': 'Alice', 'age': 25, 'city': 'New York'},
    {'name': 'Bob', 'age': 30, 'city': 'London'},
    {'name': 'Charlie', 'age': 25, 'city': 'New York'},
    {'name': 'Dave', 'age': 30, 'city': 'London'},
  ];

  List<String> properties = ['age', 'city'];
  Map<String, List<Map<String, dynamic>>> groupedData = data.groupBy(properties);

  for (var entry in groupedData.entries) {
    print('Group ${entry.key}:');
    for (var element in entry.value) {
      print(element);
    }
    print('');
  }
}

在上述代码中,我们定义了一个groupBy扩展方法,它接受一个包含属性名的列表作为参数。然后,我们遍历列表中的每个元素,根据指定的属性值生成一个唯一的键。如果该键在结果字典中不存在,则创建一个空列表作为值。然后,将当前元素添加到对应的列表中。最后,返回分组结果字典。

main函数中,我们创建了一个包含姓名、年龄和城市的数据列表。然后,我们指定按照年龄和城市进行分组,并将结果存储在groupedData变量中。最后,我们遍历分组结果,并打印每个分组的内容。

这是一个简单的示例,你可以根据实际需求进行修改和扩展。如果你想了解更多关于Dart的相关知识,可以参考腾讯云的Dart开发者指南

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【老孟Flutter】Flutter 2 新增的功能

    今天,我们很高兴地宣布Flutter 2的发布。距离Flutter 1.0的发布已经两年多了,但是在很短的时间内,我们已经关闭了24,541期,并合并了765个贡献者的17,039个PR。自9月Flutter 1.22发布以来,我们已经关闭了5807期并合并了298位贡献者的4091个PR。特别感谢我们的志愿者捐助者,他们慷慨地抽出时间来改进Flutter项目。Flutter 2 release 版本前几名志愿者贡献者是xubaolin46个PR,a14n32个PR,专注于使Flutter达到零安全,hamdikahloun具有20个PR,改善了Flutter插件的数量。但是,不仅仅是编码员为Flutter项目做出了贡献。一大批志愿者PR评审人员还负责评审1525个PR,包括hamdikahloun(再次!),CareF和YazeedAlKhalaf(16个!)。Flutter确实是社区的一项工作,如果没有问题提出者,PR贡献者和代码审查者,我们就不可能进入第2版。此版本适用于所有人。

    02
    领券