如何从Dart的Map<String, List<MyModel>>中提取所有MyModel元素?
在Dart中合并Map值列表的高效方法
你可以用Dart内置的expand方法来实现,完全不用自己写两层循环,而且这个方法在处理大数据量时效率也很可观。
expand的作用是将Map中每个值(也就是每个List<MyModel>)的元素展开,生成一个包含所有元素的迭代器,最后转成List即可,代码示例:
// 假设你的Map定义如下 Map<String, List<MyModel>> myMap = { 'a': [MyModel1, MyModel2], 'b': [MyModel3], 'c': [MyModel4, MyModel5] }; // 合并所有子列表元素 List<MyModel> mergedList = myMap.values.expand((subList) => subList).toList();
这个方法的优势在于:
- 代码简洁,不用手动嵌套循环
- 内部是Dart优化过的迭代逻辑,比自己写两层循环更高效
- 采用延迟迭代的方式,处理超大Map时不会一次性加载所有中间数据,内存占用更合理
如果有去重需求,还可以在转List前加上toSet()再转回List,但如果不需要去重,直接用上面的代码就足够了。
内容的提问来源于stack exchange,提问作者Divyam Dhadwal
相关产品推荐
相关产品推荐

