6 个版本
0.0.6 | 2024 年 6 月 2 日 |
---|---|
0.0.5 | 2024 年 5 月 29 日 |
#358 在 数据结构
每月 301 次下载
190KB
3.5K SLoC
Rust 的已填充集合
具有保证的 1 个或多个元素的非空集合类型。
一个用于处理非空集合(即已填充集合)的库。在其已填充版本中反映了 std 集合,保证集合中始终包含至少一个元素。
这些集合在你希望确保集合永远不会为空时非常有用。任何尝试使其为空的操作都将导致编译时错误。此外,这些集合还提供了有关其长度和容量的额外保证,这些长度和容量始终不为零。这意味着在你知道集合将始终至少有一个元素的情况下,你不需要处理 Option
。例如,你可以在 PopulatedVec
上调用 first()
,并保证获取到第一个元素的引用,而无需处理 Option
。
安全过渡到 std
集合,当清空已填充集合时
如果你调用了一个清空已填充集合的操作,该库提供了一个安全的方法来过渡到相应的 std
集合。例如,如果你在 PopulatedVec
上调用 clear()
,它将返回底层的 Vec
。在 PopulatedVec
上调用 clear()
将获取 PopulatedVec
的所有权并返回底层的 Vec
。这样,任何尝试使用已清空的 PopulatedVec
的操作都将导致编译时错误。同时,当你需要时,你可以安全且高效地过渡到 Vec
。
集合
以下 std
集合已在本库中映射
Vec
→PopulatedVec
Slice
→PopulatedSlice
BinaryHeap
→PopulatedBinaryHeap
HashMap
→PopulatedHashMap
HashSet
→PopulatedHashSet
BTreeMap
→PopulatedBTreeMap
BTreeSet
→PopulatedBTreeSet
VecDeque
→PopulatedVecDeque
示例
first()
在 PopulatedVec
和 PopulatedSlice
上使用
use populated::{PopulatedVec, PopulatedSlice};
let vec = PopulatedVec::new(1);
assert_eq!(vec.len().get(), 1);
assert_eq!(vec.first(), &1);
let slice = vec.as_slice();
assert_eq!(slice.len().get(), 1);
assert_eq!(slice.first(), &1);
clear()
在 BTreeMap
上使用
use populated::PopulatedBTreeMap;
let mut map = PopulatedBTreeMap::new("a", 1);
map.insert("b", 2);
assert_eq!(map.len().get(), 2);
// Safe transition to std BTreeMap on clear
let map = map.clear();
assert_eq!(map.len(), 0);