【发布时间】:2020-12-30 15:29:42
【问题描述】:
我有一个如下的列表地图:
[
data{text: hello, date: 2020-09-11}, data{text: hi, date: 2020-09-12},
data{text: why, date: 2020-09-11}, data{text: how, date: 2020-09-10},
data{text: when, date: 2020-09-11}, data{text:flutter, date: 2020-09-12}
]
而我想要得到的是这个:
{
2020-09-10 : [how],
2020-09-11 : [hello, why, when],
2020-09-12 : [hi, flutter]
}
我在 list<map> 和 list 之间有点困惑,我不知道如何解决这个问题。
我已经知道使用方法toSet().toList() 删除重复的东西。
有没有与此相关的方法?提前致谢。
-------------------- 以下回答后 ----------------- ------
日期 => 创建时间,文本 => 重复
loadRepeat() async {
DBHelperRepeat sd = DBHelperRepeat();
var list = await sd.repeats();
List newList = [];
if (list[0].createTime == list[1].createTime) {
newList.add({
'date': list[0].createTime,
'repeat': list[0].repeat + ',' + list[1].createTime
});
} else {
newList.add({'date': list[0].createTime, 'repeat': list[0].repeat});
newList.add({'date': list[1].createTime, 'repeat': list[1].repeat});
}
for (int i = 2; i < list.length; i++) {
if (list[i].createTime == newList.last.createTime) {
newList.last.repeat += ',' + list[i].repeat;
} else {
newList.add(list[i]);
}
}
print(newList);
}
这是我的 sqlite 数据库代码
repeat.dart
class Repeat {
final String repeat;
final String createTime;
final int year;
final int month;
final int date;
Repeat({this.repeat, this.createTime, this.year, this.month, this.date});
Map<String, dynamic> toMap() {
return {
'repeat': repeat,
'createTime': createTime,
'year': year,
'month': month,
'date': date
};
}
@override
String toString() {
return '{repeat: $repeat, createTime: $createTime, year: $year, month: $month, date: $date}';
}
}
db_repeat.dart
class DBHelperRepeat {
var _db;
Future<Database> get database async {
if (_db != null) return _db;
_db = openDatabase(
join(await getDatabasesPath(), 'repeats.db'),
onCreate: (db, version) {
return db.execute(
"CREATE TABLE repeats(repeat TEXT, createTime TEXT, year INT, month INT, date INT)",
);
},
version: 1,
);
return _db;
}
Future<void> insertRepeat(Repeat repeat) async {
final db = await database;
await db.insert('repeats', repeat.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace);
}
Future<List<Repeat>> repeats() async {
final db = await database;
final List<Map<String, dynamic>> maps = await db.query('repeats');
return List.generate(maps.length, (i) {
return Repeat(
repeat: maps[i]['repeat'],
createTime: maps[i]['createTime'],
year: maps[i]['year'],
month: maps[i]['month'],
date: maps[i]['date']);
});
}
示例数据列表:
[{repeat: repeat1, createTime: 2020-09-13, year: 2020, month: 9, date: 13}]
【问题讨论】: