今天关注的人突然多了起来,为此继续更新今天的第二篇

dart - 如何制作新数组嵌套排序映射?

我有一个看起来像这样的数据块:

var list = [{ id: '1', title: 'thing1', week: 1, day: 1 },{ id: '2', title: 'thing2', week: 1, day: 1 },{ id: '3', title: 'thing3', week: 1, day: 2 },{ id: '4', title: 'thing4', week: 1, day: 2 },{ id: '5', title: 'thing5', week: 1, day: 3 },{ id: '6', title: 'thing6', week: 1, day: 3 },{ id: '7', title: 'thing7', week: 2, day: 4 },{ id: '8', title: 'thing8', week: 2, day: 5 },
];

我想要做的是将这个 List 转换为输出这个的东西:

var transformedList = [{ 'Week 1': [{ id: '1', title: 'thing1', day: 1, week: 1 },{ id: '2', title: 'thing2', day: 1, week: 1 },{ id: '3', title: 'thing3', day: 2, week: 1 },{ id: '4', title: 'thing4', day: 2, week: 1 },{ id: '5', title: 'thing5', day: 3, week: 1 },{ id: '6', title: 'thing6', day: 3, week: 1 },],'Week 2': [{ id: '7', title: 'thing7', day: 4, week: 2 },{ id: '8', title: 'thing8', day: 5, week: 3 },]}
]

到目前为止我尝试过的是:

var programMap = Map.fromIterable(userProgramSteps, key: (k) => k.getWeek(), value: (v) => v);// handles the week port just fine, but very stuck on the list of days.

我对flutter和 Dart 很陌生,所以我有点迷茫…有人可以帮忙吗?

最佳答案

尊重您之前(已删除)的问题,这里的代码:
data_weeks.dart

const week_data = [{ 'id': '1', 'week': 1, 'day': 1, 'title': 'thing1' },{ 'id': '2', 'week': 1, 'day': 1, 'title': 'thing2' },{ 'id': '3', 'week': 1, 'day': 1, 'title': 'thing3' },{ 'id': '4', 'week': 1, 'day': 2, 'title': 'thing4' },{ 'id': '5', 'week': 1, 'day': 2, 'title': 'thing5' },{ 'id': '6', 'week': 2, 'day': 3, 'title': 'thing6' },{ 'id': '7', 'week': 2, 'day': 4, 'title': 'thing7' },
];

home_page.dart

import 'package:flutter/material.dart';
import 'package:list_cards/src/shared/data_weeks.dart';class HomePage extends StatelessWidget {/* ---------------------------------------------------------------------------- */const HomePage({Key key}) : super(key: key);/* ---------------------------------------------------------------------------- */@overrideWidget build(BuildContext context) {final data = getNewData();return Scaffold(appBar: AppBar(title: Text('Hi!'),centerTitle: true,),body: Padding(padding: const EdgeInsets.all(10.0),child: ListView.builder(itemCount: data.length,itemBuilder: (context, index) => ListTile(title: Text('Week ${data.keys.toList()[index]}', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),),subtitle: getSubtitles1(data[data.keys.toList()[index]], context),),),),);}Widget getSubtitles1(List<Map<int, Object>> data, BuildContext context) {return Column(children: List.generate(data.length, (index) => ListTile(title: Text('DAY ${data[index].keys.toList()[0]}',style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold, color: Colors.black.withOpacity(0.4)),),subtitle: getSubtitles2(data[index][data[index].keys.toList()[0]], context),)),);}Widget getSubtitles2(List<String> data, BuildContext context) {final size = MediaQuery.of(context).size;return Column(children: List.generate(data.length, (index) => Card(elevation: 0,margin: EdgeInsets.all(0),child: Padding(padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 2),child: Row(children: [Container(width: (size.width + 80) / 2,child: Text(data[index]),),IconButton(icon: Icon(Icons.check_box_outline_blank), onPressed: () {}),],),),)),);}Map<int, Object> getNewData() {var weeks = week_data.map<int>((m) => m['week']).toSet().toList();var newData = Map<int, Object>();weeks.forEach((w) {newData[w] = week_data.where((m) => m['week'] == w).map<int>((m) => m['day']).toSet().map<Map<int, Object>>((e) => {e: week_data.where((m) => m['week'] == w && m['day'] == e).map<String>((m) => m['title']).toList()}).toList();});return newData;}
}

结果:

关于您当前的问题,getNewData()方法包含您的答案的逻辑。好好享受!

dart - 如何制作新数组嵌套排序映射相关推荐

  1. java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。

    合并两个排序的整数数组A和B变成一个新的数组.新数组也要有序. 样例 1:输入: A=[1], B=[1]输出:[1,1]样例解释: 返回合并后的数组.样例 2:输入: A=[1,2,3,4], B= ...

  2. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.27(列排序)用下面的方法实现一个二维数组中的列排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  3. Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.26(行排序)用下面的方法实现一个二维数组中的行排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  4. 对以下学员随机排序,生成一个新数组:var arr = [“鹿晗“,“王俊凯“,“蔡徐坤“,“彭于晏“,“周杰伦“,“刘德华“,“赵本山“]

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序

    关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...

  6. 按属性值对对象数组进行排序

    我使用AJAX获得了以下对象并将它们存储在数组中: var homes = [{"h_id": "3","city": "Dall ...

  7. 好程序员web前端分享数组及排序、去重和随机点名

    好程序员web前端分享数组及排序.去重和随机点名,栈堆结构:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除. 栈:存放的是路径:容量有限(在一开始被定义之 ...

  8. arraylist扩容是创建新数组吗 java_Java 集合,你肯定也会被问到这些

    文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 作为一位小菜 "一面面试官",面试过程中,我肯定会问 Java 集合的内容,同时作为求职者,也肯定会 ...

  9. .net 遍历数组找重复值写入一个新数组_第二轮 Python 刷题笔记一:数组

    经过四十多天缓慢的刷题,现在进度大概是刷了八十多道 LeetCode 题,最近也在吸取过来人的经验,仍然需要对刷题计划进行调整. 首先明确一下目标,我是有些 Python 基础,想通过刷题掌握更多算法 ...

最新文章

  1. boost::intrusive::splaytree_algorithms用法的测试程序
  2. 从零写一个编译器(四):语法分析之构造有限状态自动机
  3. 关于aop:pointcut的expression配制说明及JoinPoint
  4. pycharm同步代码到远程服务器
  5. hnu 暑期实训之挖掘机技术哪家强
  6. @程序员,如何花式构建线程?
  7. 7天内新闻前加 new
  8. 【数学建模】数学建模指导:建模常用算法应用场景解析
  9. 计算机字体库位置,win7电脑的字体库在哪里?
  10. 全国道路运输管理人员考试多选练习题库
  11. 索尼手机更新android10,索尼XPERIA 10 II终于收到了ANDROID 11更新
  12. kotlin使用遇到的坑。。。
  13. 申请CSDN博客专家和码云推荐项目
  14. 那些在一个公司死磕了5-10年的人,最后都怎么样了?
  15. keepalived 中关于 weight 和 preempt_delay 的实验
  16. 个人简历的1000+篇文章总结
  17. 使用Matlab来生动展示一阶二阶电路的情况
  18. 【视频】海康摄像头、NVR网络协议简介
  19. Java基础之IO流(二)
  20. ios关于农历的一些操作

热门文章

  1. java性能分析与问题定位 实战
  2. php递归复制文件内容,PHP实现递归复制整个文件夹的类实例_php技巧
  3. php cms使用视频教程,PHPCMS v9视频模块使用教程二
  4. android读取本地yaml文件_python笔记11-读取yaml配置文件(pyyaml)
  5. 新华三的背景_新华三集团与飞友科技签署战略合作协议,共赢智慧机场新时代...
  6. php detailview,GridView以及DetailView的数据格式化
  7. iframe 禁止打开新窗口_教育部新政策:禁止中学生复读?
  8. 谷歌浏览器正式版90_谷歌浏览器 Google Chrome v79.0.3945.88 正式版
  9. python语言编写的modbus协议_RTU Modbus从机的python脚本
  10. vimrc-20201028重新配置