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 日 |
#633 在 Rust 模式 中
每月 424 次下载
27KB
502 行
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();
// ...
}