Flutter以一个Map的value来进行分组并以List分组保存

1.主要思路:

我们都知道,在一个map中的key是唯一不重复的,所以核心方法就是将map的value转key并以此来进行分组,这个时候就需要使用到putIfAbesent(翻译:当缺席的时候就放,很好理解吧?)

2.例子代码如下:

Map<String, int> resultMap = {
    '1,2': 1,
    '1,3': 2,
    '1,4': 3,
    '1,5': 3,
    '1,6': 4,
    '1,7': 4,
    '1,8': 4,
    '1,9': 5,
  };

  List<KeyValueProcessor> mapData = [];

  resultMap.forEach((key, value) {
    mapData.add(KeyValueProcessor(key: key, value: value));
  });
  mapData.sort((a, b) => b.value - a.value);
  print(
      '这是将Map的值赋予给List之后的mapData第0个索引里的\nkey: ${mapData[0].key.toString()}\nvalue: ${mapData[0].value.toString()}');

  Map<int, List<KeyValueProcessor>> groupedMap = {};
  for (var item in mapData) {
    groupedMap.putIfAbsent(item.value, () => []).add(item);
  }

  groupedMap.forEach((key, value) {
    print('$key ---- $value');
  });
}

class KeyValueProcessor {
  String key;
  int value;

  KeyValueProcessor({required this.key, required this.value});

  printInfo() {
    print('key:$key ----- value:$value');
  }
}

putIfAbsent()中需要两个参数,第一个是key,第二个是value;执行逻辑就是:当如代码中的item.value不存在,那么就会创建一个元素以item.value为key,以[]为value放到这个叫groupedMap的集合中,然后再添加item(实际就是上面遍历List<KeyValueProcessor> mapData里的数据),如果从MapData来的数据value仍旧为1的话,那么就不会再创建一个新的key,putIfAbsent不执行,最后将item加入到groupedMap中

3.结言

记录为主

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值