如何用C#统计连续数据组并实现条件触发与切换?
实时数据条件触发解决方案
核心思路
因为是逐分钟实时处理,必须维护持久化的状态变量来跟踪连续序列和组的计数,不能仅单次统计当前数组,而是要每次处理新数据时更新状态。
关键状态变量
需要维护以下状态(可根据运行环境选择全局变量、类属性或数据库存储来持久化):
current_streak_val: 当前正在连续的数值(比如2、3或其他)total_2_groups: 累计出现的连续2的序列组数(每段连续的2算一组,不管长度)total_3_groups: 累计出现的连续3的序列组数condition2: 目标条件1,初始为Falsecondition3: 目标条件2(你提到的"另一条件"),初始为False
逐分钟处理逻辑
- 连续序列判断:每次拿到新的分钟数据,先判断是否和上一分钟的数值连续:
- 如果连续,直接延续当前序列,无需统计新组;
- 如果不连续,先结束上一个连续序列,统计对应的组数量,再切换到新的连续序列。
- 条件触发判断:
- 当连续2的组累计到3组时,立即将
condition2设为True(对应你说的第12分钟第三组2开始时触发); - 当
condition2为True的状态下,连续3的组累计到3组时,将condition3设为True,同时把condition2设为False(对应第29分钟的切换)。
- 当连续2的组累计到3组时,立即将
伪代码示例
# 初始化状态 current_streak_val = None total_2_groups = 0 total_3_groups = 0 condition2 = False condition3 = False def process_new_minute_data(new_value, current_minute): global current_streak_val, total_2_groups, total_3_groups, condition2, condition3 if new_value == current_streak_val: # 连续序列延续,无需统计新组 pass else: # 上一个序列结束,统计组 if current_streak_val == 2: total_2_groups += 1 if total_2_groups == 3 and not condition2: condition2 = True print(f"第{current_minute}分钟:condition2已设为TRUE") elif current_streak_val == 3: total_3_groups += 1 if total_3_groups == 3 and condition2: condition3 = True condition2 = False print(f"第{current_minute}分钟:condition3设为TRUE,condition2设为FALSE") # 更新当前连续值 current_streak_val = new_value # 处理初始状态(第一次接收数据) if current_streak_val is None: current_streak_val = new_value return {"condition2": condition2, "condition3": condition3}
注意事项
如果你的"三组连续的2"是指单组内连续出现3个2(而非3个独立的2序列),只需修改判断逻辑:当current_streak_val == 2且当前连续长度达到3时,累计一个有效计数,直到该计数到3时触发condition2即可。
内容的提问来源于stack exchange,提问作者whiterhino
相关产品推荐
相关产品推荐

