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); }
代码说明
- 第一个循环遍历列表前3个元素,同时判断列表长度避免越界,将银行名称和余额直接存入
chartData - 第二个循环从第4个元素开始,累加所有剩余银行的余额
- 最后判断总和是否大于0,避免无剩余数据时出现
OTHERS: 0的无效项
内容的提问来源于stack exchange,提问作者user22362195
相关产品推荐
相关产品推荐

