2 个不稳定版本
0.2.0 | 2021 年 1 月 19 日 |
---|---|
0.1.0 | 2019 年 12 月 1 日 |
#1022 in Rust 模式
41KB
836 行
scanmut
在 O(n) 时间复杂度内向 Vec 插入或删除多个元素。
此软件包提供了两种类型用于灵活高效的 Vec 模式;Inserter 和 Remover。这两种类型可以看作是对 Vec::insert 和 Vec::drain 的更通用的实现,允许你例如高效地插入切片,条件性地删除元素,或在删除元素的同时访问 Vec 的元素。
Inserter 和 Remover 需要插入和删除索引的顺序;Inserter 为单调不增,Remover 为单调递增。
为了方便,还有一些扩展特质,通过 Inserter 和 Remover 添加常见的高级操作。请参阅 ScanMut、InsertSliceClone 和 InsertSliceCopy。
示例
使用 ScanMut::insert_all 将切片插入到 vec 中
use scanmut::prelude::*;
let mut v = vec!['a', 'b', 'c'];
v.insert_all(1, ['d', 'e'].iter().cloned());
assert_eq!(v, vec!['a', 'd', 'e', 'b', 'c']);
使用 ScanMut::multi_remove 在一次扫描中删除多个元素
use scanmut::prelude::*;
let mut v = vec!['a', 'b', 'c'];
v.multi_remove([0, 2].iter().cloned(), drop);
assert_eq!(v, vec!['b']);
许可证:MIT