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→PopulatedVecSlice→PopulatedSliceBinaryHeap→PopulatedBinaryHeapHashMap→PopulatedHashMapHashSet→PopulatedHashSetBTreeMap→PopulatedBTreeMapBTreeSet→PopulatedBTreeSetVecDeque→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);