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.结言
记录为主