当前位置: 首页 > 工具软件 > ListFold > 使用案例 >

dart List分组

张兴旺
2023-12-01

dart语言中List中的元素需要根据某个属性或者字段进行分组(此处使用的都是模拟数据)

class User {

  String username;

  String password;

  final int age;

  User(this.username, this.password, this.age);


}

void main() {
       List<User> list = [
         User("zhangsan", "123456", 18),
         User("wangwu", "789456", 18)
       ];
       Map<int, List<User>> map = new Map.fromIterable(list,
         key: (key) => key.age,
         value: (value) {
            return list.where((item) => item.age == value.age).toList();
         });
       map.forEach((k,v) {
         print('$k --- ${v.map((value) => value.username).join(",")}');
       });
}

使用Map.fromIterable函数,创建的是LinkedHashMap,传入三个参数,第一个可迭代的集合就是原数据,命名参数key,命名参数value,都是两个函数,代码也比较简单。理解就行

这是最开始的写法 已经不推荐使用了

新版的写法dart中提供了一个函数groupBy() 顶层方法可以将集合分组

第一个参数是需要分组的集合,第二个是个函数,构建Map的key,在此场景中理解为将哪个字段设置为key

需要引入这个插件collection: ^1.16.0 版本自己选吧

导入的包是import 'package:collection/collection.dart';

Map<int, List<User>> ageMapperUsers = groupBy(list, (user) => user.age);
 类似资料: