我想更新地图的钥匙。我按日期对地图进行排序,但现在键不是按数字顺序排列的。
原始地图:
Map<dynamic, dynamic> myMap = {
0: {"id": 754, "name": "luke", "date": 1665537500000},
1: {"id": 436, "name": "obi", "date": 1665532400000},
2: {"id": 866, "name": "vader", "date": 1665532500000},
};
myMapSorted = SplayTreeMap.from(myMap, (a, b) => myMap[a]['time'].compareTo(myMap[b]['time']));
print(myMapSorted);排序映射(键不按数字顺序排列):
{
1: {"id": 436, "name": "obi", "date": 1665532400000},
2: {"id": 866, "name": "vader", "date": 1665532500000},
0: {"id": 754, "name": "luke", "date": 1665537500000},
};有办法更新钥匙吗?
发布于 2022-10-20 17:28:52
如果您发现自己使用的是一个具有连续整数键的Map,并且您不关心插入顺序,那么您应该后退一步,问问自己是否应该使用List,特别是如果您的键也从0开始。使用List更简单,效率更高。
听起来这也适用于你的情况。而不是:
Map myMap ={ 0:{"id":754,“名称”:“路克”,“日期”:1665537500000},1:{"id":436,"name":"obi","date":1665532400000},2:{"id":866,"name":"vader","date":1665532500000},};
用途:
var myMap = <dynamic>[
{"id": 754, "name": "luke", "date": 1665537500000},
{"id": 436, "name": "obi", "date": 1665532400000},
{"id": 866, "name": "vader", "date": 1665532500000},
];然后您可以直接用以下方法对其进行排序:
myMap.sort((a, b) => a['date'].compareTo(b['date']));获得:
[
{'id': 436, 'name': 'obi', 'date': 1665532400000},
{'id': 866, 'name': 'vader', 'date': 1665532500000},
{'id': 754, 'name': 'luke', 'date': 1665537500000},
]现在您不需要担心更新任何Map键,因为它们是List元素的隐式索引。
发布于 2022-10-19 21:02:43
正如ΟυιλιαμΑρκευα所提到的,文章的第二种方法解决了按键排序的问题。
var sortMapByKey = Map.fromEntries(
myMap.entries.toList()
..sort((e1, e2) => e1.key.compareTo(e2.key)));
print("***Sorted Map by key***");
print(sortMapByKey);https://stackoverflow.com/questions/74131356
复制相似问题