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

Flutter:如何从Map列表生成含OTHERS汇总的指定键值图表数据

问题:将银行数据列表转换为图表所需映射

我有一个存储银行数据的List<Map<String, dynamic>>,需要生成图表所需的Map<String, double>类型数据chartData。要求取前3个银行的Bank作为键、Balance作为值,剩余银行的Balance总和以OTHERS为键存入chartData。

现有代码如下:

void main() {
    List<Map<String, dynamic>> maplist = [
        {
            'Bank': 'HDFC',
            'Balance': 10900.00,
            'Transactions': []
        },
        {
            'Bank': 'AXIS',
            'Balance': 5900.00,
            'Transactions': []
        },
        {
            'Bank': 'UCO',
            'Balance': 4200.00,
            'Transactions': []
        },
        {
            'Bank': 'ICICI',
            'Balance': 2300.00,
            'Transactions': []
        },
        {
            'Bank': 'KOTAK',
            'Balance': 1200.00,
            'Transactions': []
        },
    ];
    Map<String, double> chartData = {};
}

预期chartData结果为:

{
  'HDFC':10900, 'AXIS':5900,'UCO':4200,'OTHERS':3500
}

解决方案

可以通过以下步骤实现需求:

  • 提取列表前3个元素,直接映射为chartData的键值对
  • 计算剩余元素的Balance总和,若总和大于0则添加OTHERS项

完整代码如下:

void main() {
    List<Map<String, dynamic>> maplist = [
        {
            'Bank': 'HDFC',
            'Balance': 10900.00,
            'Transactions': []
        },
        {
            'Bank': 'AXIS',
            'Balance': 5900.00,
            'Transactions': []
        },
        {
            'Bank': 'UCO',
            'Balance': 4200.00,
            'Transactions': []
        },
        {
            'Bank': 'ICICI',
            'Balance': 2300.00,
            'Transactions': []
        },
        {
            'Bank': 'KOTAK',
            'Balance': 1200.00,
            'Transactions': []
        },
    ];
    Map<String, double> chartData = {};

    // 处理前3个银行数据(兼容列表长度不足3的情况)
    for (int i = 0; i < 3 && i < maplist.length; i++) {
        var bankData = maplist[i];
        chartData[bankData['Bank']] = bankData['Balance'] as double;
    }

    // 计算剩余银行的余额总和
    double othersTotal = 0.0;
    for (int i = 3; i < maplist.length; i++) {
        othersTotal += maplist[i]['Balance'] as double;
    }

    // 仅当总和大于0时添加OTHERS项
    if (othersTotal > 0) {
        chartData['OTHERS'] = othersTotal;
    }

    print(chartData);
}

代码说明

  1. 第一个循环遍历列表前3个元素,同时判断列表长度避免越界,将银行名称和余额直接存入chartData
  2. 第二个循环从第4个元素开始,累加所有剩余银行的余额
  3. 最后判断总和是否大于0,避免无剩余数据时出现OTHERS: 0的无效项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:15:19