我正在尝试使用多个输入实现布尔AND门。每个输入都有一个标识它的整数。输入信号随机到达,并存储在门中(因此它不是纯AND门,而是具有延迟输入的门)。只有当所有输入信号都到达时,门才会启动
注意:到达同一输入的2个信号不算作两个。
我想我会创建一个存储输入的字典,当刺激到达时,更新特定输入的Id键的值,然后是AND所有值。如果结果为1,则触发门并将字典的所有值重置为0并再次等待。
我的方法听起来不对劲,我觉得必须有更优雅和高效的东西(.Net)。
答案 0 :(得分:3)
我可能有点偏离基础,但这看起来像Rx Framework非常适合。通过这种方式,您可以转换为纯粹的反应式编程,您可以声明在收到所有输入之前不会发送输出。对于外部消费者,您的门将作为IObservable<bool>
运行,这有点等同于IEnumerable<bool>
。任何观察者只会看到输出的枚举,这会延迟输入的输入。
这里的主要好处是你可以链接observables。因此,如果您想将AND门的输出链接到OR门的输入,您可以使用一行代码来实现。对我来说,Rx是建模电路如何工作的完美框架,因为每个可观测量的结果在下一个可观测量的输入中起作用。
要开始使用,我建议您在Channel9上查看series of videos。
答案 1 :(得分:1)
如果输入ID是顺序输入,则可能使用bool []而不是字典。
bool[] inputs = new bool[10];
void SetInput(int id, bool val)
{
inputs[id] = val;
}
bool trigger()
{
return inputs.All(b => b);
}
void reset()
{
Array.Clear(input, 0, inputs.Length);
}
答案 2 :(得分:1)
我不需要存储输入信息。 只要信号到达,只需检查它是否为零,确保结果为零。如果是一个,不做任何具体的事情。然后你只需要检查所有输入信号是否都已到达。
答案 3 :(得分:0)