Dart中按genere字段分组List<Map>数据的技术问询
按genere字段分组List数据的实现方法
需求说明
给定如下结构的电影数据列表:
List<dynamic> lists = [ {"name":"SpiderMan", "genere":"superhero"}, {"name":"Batman", "genere":"superhero"}, {"name":"Notebook", "genere":"romance"}, {"name":"Titanic", "genere":"romance"} ];
需要将其按genere字段分组,最终得到包含单个分组键值对Map的列表格式。
实现代码
可以通过Dart的fold方法完成分组逻辑,再转换为目标格式:
void main() { List<dynamic> lists = [ {"name":"SpiderMan", "genere":"superhero"}, {"name":"Batman", "genere":"superhero"}, {"name":"Notebook", "genere":"romance"}, {"name":"Titanic", "genere":"romance"} ]; // 第一步:按genere分组生成Map Map<String, List<dynamic>> groupedMap = lists.fold({}, (acc, item) { final genere = item['genere'] as String; acc.putIfAbsent(genere, () => []).add(item); return acc; }); // 第二步:转换为目标List格式 List<Map<String, List<dynamic>>> result = groupedMap.entries .map((entry) => {entry.key: entry.value}) .toList(); // 打印结果验证 print(result); }
结果说明
运行上述代码后,result的结构与需求一致:
[ {"romance": [{"name":"Notebook","genere":"romance"},{"name":"Titanic","genere":"romance"}]}, {"superhero": [{"name":"SpiderMan","genere":"superhero"},{"name":"Batman","genere":"superhero"}]} ]
内容的提问来源于stack exchange,提问作者Nahom Ersom
相关产品推荐
相关产品推荐

