#collection #non-empty #slice #version

populated

保证已填充(即非空)的集合类型。基于 std::collections 类型。

6 个版本

0.0.6 2024 年 6 月 2 日
0.0.5 2024 年 5 月 29 日

#358数据结构

Download history 440/week @ 2024-05-22 265/week @ 2024-05-29 32/week @ 2024-06-05 4/week @ 2024-06-12

每月 301 次下载

Apache-2.0

190KB
3.5K SLoC

Rust 的已填充集合

具有保证的 1 个或多个元素的非空集合类型。

一个用于处理非空集合(即已填充集合)的库。在其已填充版本中反映了 std 集合,保证集合中始终包含至少一个元素。

这些集合在你希望确保集合永远不会为空时非常有用。任何尝试使其为空的操作都将导致编译时错误。此外,这些集合还提供了有关其长度和容量的额外保证,这些长度和容量始终不为零。这意味着在你知道集合将始终至少有一个元素的情况下,你不需要处理 Option。例如,你可以在 PopulatedVec 上调用 first(),并保证获取到第一个元素的引用,而无需处理 Option

安全过渡到 std 集合,当清空已填充集合时

如果你调用了一个清空已填充集合的操作,该库提供了一个安全的方法来过渡到相应的 std 集合。例如,如果你在 PopulatedVec 上调用 clear(),它将返回底层的 Vec。在 PopulatedVec 上调用 clear() 将获取 PopulatedVec 的所有权并返回底层的 Vec。这样,任何尝试使用已清空的 PopulatedVec 的操作都将导致编译时错误。同时,当你需要时,你可以安全且高效地过渡到 Vec

集合

以下 std 集合已在本库中映射

  • VecPopulatedVec
  • SlicePopulatedSlice
  • BinaryHeapPopulatedBinaryHeap
  • HashMapPopulatedHashMap
  • HashSetPopulatedHashSet
  • BTreeMapPopulatedBTreeMap
  • BTreeSetPopulatedBTreeSet
  • VecDequePopulatedVecDeque

示例

first()PopulatedVecPopulatedSlice 上使用

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);

无运行时依赖