#iterable #reduction #pattern #nested #abstraction #generic #combining

reductor

针对可迭代对象结合和嵌套减少模式的泛型抽象

13 个版本

0.0.12 2024 年 3 月 26 日
0.0.11 2024 年 3 月 26 日
0.0.10 2022 年 10 月 2 日
0.0.9 2022 年 8 月 6 日
0.0.4 2021 年 8 月 22 日

#633Rust 模式

Download history 1/week @ 2024-05-25

每月 424 次下载

MIT/Apache

27KB
502

reductor

针对可迭代对象结合和嵌套减少模式的泛型抽象。

文档:https//docs.rs/reductor

前后对比

之前

fn process_samples(
    samples: &[i32],
    scale: &[i32],
    upper_limit: i32
) {
    let mut sum = 0;
    let mut min = None;
    let mut max = None;

    for (sample, scale) in samples.iter().zip(scale) {
        let scaled = sample * scale;

        if scaled <= upper_limit {
            continue;
        }

        sum += scaled;
        min = Some(match min {
            Some(min) => scaled.min(min),
            None => scaled,
        });
        max = Some(match max {
            Some(max) => scaled.max(max),
            None => scaled,
        });
    }

    // ...
}

之后

use reductor::{Reduce, Reductors, Sum, Min, Max};

fn process_samples(
    samples: &[i32],
    scale: &[i32],
    upper_limit: i32
) {
    let Reductors((Sum::<i32>(sum), Min::<Option<i32>>(min), Max::<Option<i32>>(max))) = samples
        .iter()
        .zip(scale)
        .map(|(sample, scale)| sample * scale)
        .filter(|&scaled| scaled <= upper_limit)
        .reduce_with();

    // ...
}

无运行时依赖