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 毫秒。这有助于稳定传感器,以防小电子精灵产生一个来自糟糕的湿度精灵的奇怪值。

但是,请随意使用这个数据结构!祝你好运!!

无运行时依赖