我目前有一个Map<int, dynamic>关键是插入顺序的地方。
例如
const Map<int, dynamic> log = {
1: {'startDate': 1111, 'endDate': 2222},
2: {'startDate': 123123, 'endDate': 1231233},
3: {'startDate': 555555, 'endDate': 5555556},
4: {'startDate': 888888},
};
Run Code Online (Sandbox Code Playgroud)
现在我怎样才能得到最后的X金额?
我在想
final Iterable<int> numberOfLogs = log.keys;
final Iterable<int> reversedNumberOfLogs = numberOfLogs.toList().reversed;
final Iterable<int> recent2Logs = reversedNumberOfLogs.take(2);
Run Code Online (Sandbox Code Playgroud)
然后我可以循环遍历recent2Logs然后log通过循环索引访问Map?
有一个更好的方法吗?
jam*_*lin 11
请注意,Map和Set的默认实现分别是 aLinkedHashMap和LinkedHashSet,它们在迭代它们时已经为您保留了插入顺序。利用这一点,要获取Iterable最后n个值,您可以执行以下操作:
var lastValues = log.values.toList().reversed.take(n);
Run Code Online (Sandbox Code Playgroud)
如果你希望结果保持Map带有整数键,那么那就是:
var prunedLog = Map.fromEntries(log.entries.toList().reversed.take(n));
Run Code Online (Sandbox Code Playgroud)
请注意,上面的两个示例都将按照从最近到最近的顺序返回项目。如果您想要按时间顺序排列它们,则必须再次反转结果,例如:
var prunedLog = Map.fromEntries(
log.entries.toList().reversed.take(n).toList().reversed);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2328 次 |
| 最近记录: |