1 个不稳定版本
0.0.1 | 2020 年 8 月 9 日 |
---|
#287 在 #数据结构
7KB
109 行
rjwindow
超级简单的数据结构。一个窗口。将数据放入其中,如果达到最大容量,最老的项将被移除。砰!
示例
use rjwindow::Window;
let my_data = vec![1, 2, 3, 4, 5];
let mut window = Window::<usize>::new(5);
window.stack(1);
window.stack(2);
window.extend(my_data);
assert_eq!(window.len(), 5);
使用场景?
在我的一个项目中,我使用 MCP3008 模拟数字转换器芯片读取电容式土壤湿度传感器。我每 3 秒读取一次。然而,它们很敏感,一滴水可以使它们的读数从 20 瞬间增加到 900(在 0-1024 的范围内)。所以为了解决这个问题,我把读数堆叠到一个窗口上,并查看窗口的平均值!例如
// example not intended to be rust accurate
let history = Window::new(100);
loop {
for _ in 0..5 {
history.stack(read_sensor());
thread::sleep(Duration::from_millis(10));
}
let avg = average(history.peek(10));
thread::sleep(Duration::from_secs(3));
}
现在我拥有特定时间段内传感器的平均值。每次读取传感器(除了第一次)平均的读数是 [0-5 ... 3 秒后的 ... 0-5],每个值间隔 10 毫秒。这有助于稳定传感器,以防小电子精灵产生一个来自糟糕的湿度精灵的奇怪值。
但是,请随意使用这个数据结构!祝你好运!!