C#中找出对象数组中重复最多的产品组及算法优化问题
问题与需求
现有广告数据处理任务,数据源为U16.txt,每条记录包含广告产品、产品组、视频时长、像素分辨率。已完成以下功能:
- 实现
Clip类存储单条广告数据 - 实现
Clips容器类存储全量广告数据,支持表格打印原始数据 - 实现指定分辨率的广告容器(每组仅保留一条),支持按「时长+产品组」排序并计算总时长
待解决问题:
无法正确提取重复次数最多的产品组(若存在多个并列最高频组,需全部存入单独容器);当前使用的最频繁元素查找算法会重复输出目标组,需优化为仅输出唯一的最高频组。
优化方案:最高频产品组提取
核心逻辑
- 统计所有产品组的出现频次,用字典存储(键为产品组,值为出现次数)——天然去重,避免重复计数
- 找出频次的最大值
- 筛选所有频次等于最大值的产品组,直接存入目标容器(字典键本身唯一,无需额外去重)
代码实现(以Python为例,适配现有类结构)
假设Clips容器类提供get_product_groups()方法返回所有产品组的迭代器:
def extract_top_frequent_groups(clips): # 统计频次 group_freq = {} for group in clips.get_product_groups(): group_freq[group] = group_freq.get(group, 0) + 1 if not group_freq: return [] # 空数据处理 # 取最大频次 max_freq = max(group_freq.values()) # 筛选所有最高频组 top_groups = [group for group, freq in group_freq.items() if freq == max_freq] # 存入单独容器(示例用列表,可替换为自定义的Clips子类) return top_groups
关键优化点
- 利用字典键的唯一性,从根源避免重复统计和重复输出
- 边界处理:空数据场景直接返回空容器,避免
max()调用报错 - 时间复杂度O(n),仅需遍历一次产品组列表,效率最优
验证示例
若产品组频次为:A:3, B:3, C:2,调用方法后返回的容器将仅包含[A, B],无任何重复项。
内容的提问来源于stack exchange,提问作者Retr0Hacker
相关产品推荐
相关产品推荐

