Здравствуйте, Tasheehoo, Вы писали:
T>Привет.
T>Есть поток значений.
T>Значения скачцт вверх и вниз(больше/меньше).
T>Нужно сделать так чтоб если значение попадает в указанный диапазон, определять это событие. И нужно какимто образом сделать это окно(диапазон), вроде прилипающим чтоле... Чтоб избежать лишних срабатываний если следующее придшее значение будет незначительно ниже или выше этого "окна"..
T>Подскажите как это сделать, или что гуглить.
T>UP.
T>Может сделать это по тригерной логике? Когда значение достигает порога вхождения в "окно" — тригер срабатывает, а чтоб тригер сработал в обратну сторону значение должно достичь противополодной граници окна?
T>Как такое называется?
High watermark, low watermark. Так работают водокачки: включаются, когда значение ниже минимума, и выключаются, когда выше максимума.
public IEnumerable<int> HighLowWatermarkFilter(IEnumerable<int> source, int lowWaterMark, int highWaterMark)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
if(highWaterMark<lowWaterMark)
throw new ArgumentException();
return HighLowWatermarkFilterImpl(source, lowWaterMark, highWaterMark);
}
private IEnumerable<int> HighLowWatermarkFilterImpl(IEnumerable<int> source, int lowWaterMark, int highWaterMark)
{
bool high = true;
foreach(var val in source)
{
if(high && val < lowWaterMark)
{
high = false; yield return val;
}
if(!high && val > highWaterMark)
{
high = true; yield return val;
}
}
}