Dart 如何获取地图中的最后N个元素<;int,动态>;?
我目前有一个Dart 如何获取地图中的最后N个元素<;int,动态>;?,dart,Dart,我目前有一个映射,其中键是插入顺序 比如说 const Map<int, dynamic> log = { 1: {'startDate': 1111, 'endDate': 2222}, 2: {'startDate': 123123, 'endDate': 1231233}, 3: {'startDate': 555555, 'endDate': 5555556}, 4: {'startDate': 888888}, }; 常量映射日志={ 1:{'start
映射
,其中键是插入顺序
比如说
const Map<int, dynamic> log = {
1: {'startDate': 1111, 'endDate': 2222},
2: {'startDate': 123123, 'endDate': 1231233},
3: {'startDate': 555555, 'endDate': 5555556},
4: {'startDate': 888888},
};
常量映射日志={
1:{'startDate':1111,'endDate':2222},
2:{'startDate':123123,'endDate':1231233},
3:{'startDate':555555,'endDate':5555556},
4:{'startDate':888888},
};
现在如何获取最后的X金额?
我在想
final Iterable<int> numberOfLogs = log.keys;
final Iterable<int> reversedNumberOfLogs = numberOfLogs.toList().reversed;
final Iterable<int> recent2Logs = reversedNumberOfLogs.take(2);
final Iterable numberOfLogs=log.keys;
final Iterable reversedNumberOfLogs=numberOfLogs.toList().reversed;
最终Iterable recent2Logs=反向日志数。取(2);
然后我可以循环查看recent2Logs
,然后通过循环索引访问log
映射
有更好的方法吗?我能做到
final recent2Logs = log.key.toList().getRange(log.length - 2, log.length));
请注意,
Map
和Set
的默认实现分别是LinkedHashMap
和LinkedHashSet
,这两种实现在对它们进行迭代时已经为您保留了插入顺序。利用这一点,您可以使用Set
(或显式LinkedHashSet
)并执行以下操作:
log.toList().reversed.take(2)
直接的。如果您仍然需要整数键(因为您可能希望能够有效地删除第n个条目),并且需要继续使用Map
/LinkedHashMap
,那么:
log.entries.toList().reversed.take(2)
Woah!这比我想象的要好得多。