You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表中年份相同的Event元素分组为嵌套列表

按年份分组Event列表的解决方案

原生Dart实现(无第三方依赖)

先对列表排序(保证子列表内事件按时间有序,可选但推荐),再通过Map完成分组:

List<List<Event>> groupEventsByYear(List<Event> eventList) {
  // 按时间排序事件列表
  eventList.sort((a, b) => a.eventTime.compareTo(b.eventTime));
  
  // 初始化分组Map,key为年份,value为对应年份的Event列表
  final Map<int, List<Event>> yearGroups = {};
  
  for (final event in eventList) {
    final year = event.eventTime.year;
    // 若当前年份无对应列表则创建,再添加事件
    yearGroups.putIfAbsent(year, () => []).add(event);
  }
  
  // 将Map的value集合转为目标格式List<List<Event>>
  return yearGroups.values.toList();
}

借助collection包简化实现

如果可以引入第三方工具包,使用collection里的groupBy方法能大幅简化代码:

  1. 先添加依赖:
dart pub add collection
  1. 实现分组:
import 'package:collection/collection.dart';

List<List<Event>> groupEventsByYear(List<Event> eventList) {
  eventList.sort((a, b) => a.eventTime.compareTo(b.eventTime));
  // 直接按年份分组,再转换为目标格式
  return groupBy(eventList, (Event e) => e.eventTime.year).values.toList();
}

效果验证

用你提供的示例列表调用上述方法后,会得到如下结构的结果:

[
  [Event(eventTime: 1961-05-12 00:00:00.000)],
  [Event(eventTime: 1963-05-12 00:00:00.000), Event(eventTime: 1963-05-12 00:00:00.000), Event(eventTime: 1963-05-12 00:00:00.000)],
  [Event(eventTime: 1964-05-12 00:00:00.000)]
]

内容的提问来源于stack exchange,提问作者matti peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:45:48