如何基于clicks值对Dart中的嵌套Map进行降序排序?
按嵌套Map的"clicks"值降序排序Map<int, dynamic>
Dart中默认的Map(HashMap)是无序的,要实现按嵌套的clicks值从高到低排序并保留顺序,可通过以下步骤实现:
核心实现逻辑
- 提取原Map的所有键值对(
entries)转为列表 - 对列表按每个元素value中的
clicks值进行降序排序 - 将排序后的键值对列表转为有序Map(使用
LinkedHashMap确保顺序)
完整代码示例
import 'dart:collection'; void main() { Map<int, dynamic> myMap = { 0: {"clicks": 12, "timeStamp": "2023-08-11 11:40:36.783"}, 1: {"clicks": 1, "timeStamp": "2023-08-12 10:47:36.783"}, 2: {"clicks": 29, "timeStamp": "2023-08-13 10:47:36.783"}, 3: {"clicks": 5, "timeStamp": "2023-08-01 10:47:36.783"}, 4: {"clicks": 90, "timeStamp": "2023-08-19 10:47:36.783"}, }; // 排序并生成有序Map final sortedEntries = myMap.entries.toList() ..sort((a, b) => b.value['clicks'].compareTo(a.value['clicks'])); final myMapArranged = LinkedHashMap.fromEntries(sortedEntries); // 验证结果 myMapArranged.forEach((key, value) { print('$key: $value'); }); }
代码说明
myMap.entries.toList():将Map的键值对转换为可排序的列表sort((a, b) => b.value['clicks'].compareTo(a.value['clicks'])):通过b.value['clicks']在前实现降序排序,若要升序则交换a和b的位置LinkedHashMap.fromEntries(sortedEntries):将排序后的键值对列表转换为有序Map,保证输出顺序与排序结果一致
内容的提问来源于stack exchange,提问作者RishV
相关产品推荐
相关产品推荐

