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

如何从Dart的Map中获取最近10条指定范围的CleanCalendarEvent?

获取Map中最近的10条事件解决方案

场景1:按日期从近到远取事件,凑够10条

如果需求是优先取最近日期的所有事件,再依次往前取,直到收集满10条,可以按以下步骤实现:

  • 先做空值判断,避免空指针异常
  • 提取Map中的所有日期key,按从新到旧排序(注意要和你存储key时的格式一致,仅保留年月日)
  • 遍历排序后的日期,逐个取出对应事件列表,添加到结果中,直到结果长度达到10或遍历结束

代码示例:

List<CleanCalendarEvent> getRecent10Events() {
  final allEventsMap = widget.events;
  if (allEventsMap == null || allEventsMap.isEmpty) {
    return [];
  }

  // 提取所有日期key并按从新到旧排序
  final sortedDates = allEventsMap.keys.toList()
    ..sort((a, b) => b.compareTo(a)); // 新日期排在前面

  final recentEvents = <CleanCalendarEvent>[];
  for (final date in sortedDates) {
    final eventsOnDate = allEventsMap[date] ?? [];
    // 添加当前日期的事件,直到凑够10条
    for (final event in eventsOnDate) {
      if (recentEvents.length >= 10) {
        break;
      }
      recentEvents.add(event);
    }
    if (recentEvents.length >= 10) {
      break;
    }
  }
  return recentEvents;
}

场景2:所有事件按具体时间排序,取最近的10条

如果你的CleanCalendarEvent包含具体的事件时间字段(比如startTime),想要按事件实际发生时间取最近的10条,可以先把所有事件提取到一个列表,再排序筛选:

代码示例(假设事件有DateTime startTime属性):

List<CleanCalendarEvent> getRecent10EventsByTime() {
  final allEventsMap = widget.events;
  if (allEventsMap == null || allEventsMap.isEmpty) {
    return [];
  }

  // 提取所有事件到一个列表
  final allEvents = <CleanCalendarEvent>[];
  allEventsMap.values.forEach(allEvents.addAll);

  // 按事件时间从新到旧排序
  allEvents.sort((a, b) => b.startTime.compareTo(a.startTime));

  // 取前10条,不足10条则取全部
  return allEvents.take(10).toList();
}

注意事项

  • 确保Map的key是仅包含年月日的DateTime(和你获取单日事件时的格式一致),避免因时分秒差异导致key匹配失败
  • 如果CleanCalendarEvent没有具体时间字段,只能用场景1的方式按日期分组提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:01:31