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

Dart如何基于指定日期列表补全折线图缺失的0值GraphData数据列表

问题原因

你的代码有两个核心错误导致无法运行和得到预期结果:

  1. 构造GraphData实例做匹配时,仅传入了xAxis一个参数,不符合你定义的双参数构造函数要求,直接触发编译错误
  2. Dart默认的对象相等判断是对比内存地址,未重写==运算符和hashCode的前提下,就算两个GraphData的xAxis值完全一致,List.contains()也会判定为不相等

修复方案

推荐先把现有销售数据转换为「时间戳-销售收入」的映射表,再遍历要求的13个周日期直接取值,不存在就补0,逻辑更简单,查找效率也更高:

void main() {
  // 实际输入的周度销售数据
  List<GraphData> mockupGraphData = [
    GraphData(1586761200000, 145333),
    GraphData(1587366000000, 433343),
    GraphData(1587970800000, 223432),
    GraphData(1589180400000, 122221),
    GraphData(1589785200000, 982347),
    GraphData(1590994800000, 234322),
  ];

  int entries = 13;
  int latestDateReported = DateTime(2020, 6, 1).millisecondsSinceEpoch;
  int oneWeek = Duration(days: 7).inMilliseconds;
  int earliestEntryDate = latestDateReported - (oneWeek * entries);
  List<int> graphRequiredDates = [];
  List<GraphData> finalData = [];

  for (int i = 0; i < entries; i++) {
    earliestEntryDate += oneWeek;
    graphRequiredDates.add(earliestEntryDate);
  }

  // 转换现有数据为时间戳到收入的映射表,方便快速查找
  Map<int, int> saleMap = {
    for (var data in mockupGraphData) data.xAxis: data.yAxis
  };

  // 遍历要求的13个日期,直接生成最终数据
  for (var date in graphRequiredDates) {
    finalData.add(GraphData(date, saleMap[date] ?? 0));
  }

  print(finalData);
}

class GraphData {
  int xAxis; // 销售日期
  int yAxis; // 销售收入

  GraphData(this.xAxis, this.yAxis);

  @override
  String toString() {
    return '$xAxis $yAxis';
  }
}

运行后输出结果和你要求的理想输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:06