#vec #drain-filter #drain-where

vec-drain-where

替代 Vec::drain_filter 实现

2 个稳定版本

使用旧的 Rust 2015

1.0.1 2019年10月11日
1.0.0 2018年8月27日

936算法 中排名

Download history 68/week @ 2024-03-13 74/week @ 2024-03-20 110/week @ 2024-03-27 110/week @ 2024-04-03 75/week @ 2024-04-10 67/week @ 2024-04-17 75/week @ 2024-04-24 64/week @ 2024-05-01 57/week @ 2024-05-08 63/week @ 2024-05-15 55/week @ 2024-05-22 80/week @ 2024-05-29 81/week @ 2024-06-05 113/week @ 2024-06-12 155/week @ 2024-06-19 78/week @ 2024-06-26

每月 438 次下载
用于 12 个crate (3 个直接使用)

MIT/Apache

15KB
222

vec-drain-where

一个替代的 Vec::drain_filter 实现,与标准库的实现略有不同。

此crate提供了一个扩展特质,添加了一个 e_drain_where 方法(使用 e_ 前缀是为了防止与std冲突,因为目前 drain_filter 可能会被稳定为 drain_where)。

e_drain_where 与drain filter的一个主要区别是,它不会在释放时运行到完成,因此可以从外部通过停止迭代和丢弃迭代器来“提前停止”。

例如,Vec::drain_filter 在释放时运行到完成的原因可能是它可能会相当混乱。例如,以下代码

vec.drain_filter(|x|x.should_be_removed()).any(|x|x.had_fatal_error())

并不一定执行预期的操作,即它会清除直到找到任何具有 had_fatal_error() == true 的已清除值,然后停止清除(使用 e_drain_where)。

但在释放时运行到完成也是棘手/危险的,例如,它可能导致在释放时恐慌,从而导致双重恐慌,而 Vec::drain_filter 在稳定之前的行为可能仍然会改变,因此此crate完全避免了这个问题,但代价是使提前停止清除变得容易。

文档

文档可以在 docs.rs 上查看。(至少在发布之后;=))

许可证

根据您的选择,许可协议为以下之一

贡献

除非您明确声明,否则您提交给包括在作品中的任何有意贡献,根据 Apache-2.0 许可证定义,将按照上述方式双许可,不附加任何额外条款或条件。

无运行时依赖项