限制地图中的MapEntries数量:Dart

问题描述 投票:0回答:2

我需要一个可以存储 100 个键值对的 Map。
如果在添加新对时,对的数量超过 100,我希望删除最旧的对并添加最新的对。

有点像只有 100 个插槽的

Queue

这是当前地图,

Map<String, String> r = {
   rId: DateTime.now().toString() // Id is key, created time is value
}

我相信我们可以通过一些实施来实现这一目标

LinkedHashMap

我不明白怎么办。任何帮助表示赞赏

flutter dart hashmap linkedhashmap
2个回答
2
投票

如果您不介意添加一个包quiver有一个

LruMap
,这正是您所描述的。请参阅其文档此处

LRU 代表最近最少使用,因此这些物品将从地图中逐出,正如您所描述的那样。


0
投票

我研究了@croxx5f 解决方案,发现它不必要地有点复杂

这是一个可以满足您需要的简化版本:

  final _optimizedMap = <int, String>{};
  final items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  final entries = items.map((e) => MapEntry(e, "item $e"));

for (final e in entries) {
    _optimizedMap.remove(e.key); // removing so that items are inserted lastly, indicating that it has been used.
    _optimizedMap[e.key] = e.value;
  }

  final excess = _optimizedMap.length - 300; // <-- change to max length.
  if (excess > 0) {
    final excessKeys = _optimizedMap.keys.take(excess).toList();
    for (final k in excessKeys) {
      _optimizedMap.remove(k);
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.