dart - 如何制作新数组嵌套排序映射
生活随笔
收集整理的這篇文章主要介紹了
dart - 如何制作新数组嵌套排序映射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天關注的人突然多了起來,為此繼續更新今天的第二篇
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
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 - 如何制作新数组嵌套排序映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 其他类似GitBook的在线文档创作平台
- 下一篇: 《git常用命令》