5 个版本

0.2.3 2024 年 5 月 14 日
0.2.2 2024 年 5 月 8 日
0.2.1 2023 年 1 月 18 日
0.1.1 2022 年 12 月 20 日

缓存 类别中排名第 18

Download history 40546/week @ 2024-05-02 41311/week @ 2024-05-09 41365/week @ 2024-05-16 53189/week @ 2024-05-23 48963/week @ 2024-05-30 36736/week @ 2024-06-06 40583/week @ 2024-06-13 44534/week @ 2024-06-20 41469/week @ 2024-06-27 40973/week @ 2024-07-04 50042/week @ 2024-07-11 55428/week @ 2024-07-18 52620/week @ 2024-07-25 48143/week @ 2024-08-01 62814/week @ 2024-08-08 45206/week @ 2024-08-15

每月下载量 219,160
486 crates 中使用 (直接使用 24 个)

MIT/Apache 许可

98KB
2K SLoC

一个快速灵活的 LRU 映射

Documentation

此仓库包含一个快速灵活的 LRU 映射。

  • 速度极快。比 lru crate 快两倍,且内存开销更小。
  • 也可以用作有序映射,性能与 indexmap 相当,但增加了对 O(1) 删除的支持,而不会改变元素顺序(在 indexmap 中仅支持 O(n) 非破坏性删除)。
  • 可定制。开箱即用可以由长度或内存使用量限制,但支持自定义限制器,可以将其设置为按任何您想要的限制映射。
  • 经过测试,miri 清洁,clippy 清洁和模糊测试。
  • 支持 no_std

示例

use schnellru::{LruMap, ByLength};
let mut map = LruMap::new(ByLength::new(3));

// Insert three elements.
map.insert(1, "one");
map.insert(2, "two");
map.insert(3, "three");
assert_eq!(map.len(), 3);

// They're ordered according to which one was inserted last.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&3, &"three"));
assert_eq!(iter.next().unwrap(), (&2, &"two"));
assert_eq!(iter.next().unwrap(), (&1, &"one"));

// Access the least recently inserted one.
assert_eq!(*map.get(&1).unwrap(), "one");

// Now the order's changed.
// The element we've accessed was moved to the front.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&1, &"one"));
assert_eq!(iter.next().unwrap(), (&3, &"three"));
assert_eq!(iter.next().unwrap(), (&2, &"two"));

// Insert a fourth element.
// This will automatically pop the least recently accessed one.
map.insert(4, "four");

// Still the same number of elements.
assert_eq!(map.len(), 3);

// And this is the one which was removed.
assert!(map.peek(&2).is_none());

// And here's the new order.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&4, &"four"));
assert_eq!(iter.next().unwrap(), (&1, &"one"));
assert_eq!(iter.next().unwrap(), (&3, &"three"));

许可协议

根据您的选择,许可协议为

贡献

除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证定义,将双重许可如上所述,无需任何附加条款或条件。

依赖关系

~2MB
~25K SLoC