#iterator #slice #vector #control-flow

slicetools

为切片添加额外的迭代器

4 个版本 (2 个破坏性更新)

使用旧的 Rust 2015

0.3.0 2018年3月11日
0.2.0 2018年3月9日
0.1.1 2018年3月7日
0.1.0 2018年3月7日

#2371 in 算法

Apache-2.0

19KB
358

此crate旨在为切片提供各种工具。

由于语言中缺乏泛型关联类型,此crate使用自己的流式迭代器:因此,您不能使用这些迭代器与 for 控制流一起使用。使用 while let 控制流,或如以下示例所示使用宏辅助工具。

示例

Cargo.toml:

[dependencies]
slicetools = "0.2.*"

main.rs:

extern crate slicetools;

use slicetools::*;

let mut v = vec![1, 2, 3, 4];
{
    let mut it = v.pairs_mut();
    
    while let Some((a, b)) = it.next() {
        if *b > *a {
            *a += 1;
        }
    }
}
assert_eq!(v, &[4, 4, 4, 4]);

或者,使用辅助宏

#[macro_use] extern crate slicetools;

use slicetools::*;

let mut v = vec![1, 2, 3, 4];

stream!( v.pairs_mut() => (a, b) in {
    if *b > *a {
        *a += 1;
    }
});
assert_eq!(v, &[4, 4, 4, 4]);

变更日志

0.3.*

  • 添加了3个新的扩展来获取项目组。

0.2.*

  • 使用自己的流式迭代器而不是常规迭代器,后者是不安全的(允许在同一个项目上多次可变借用)。

  • 添加了一个新的流式传输器,用于在两个切片之间进行笛卡尔积。

没有运行时依赖