c# 根据日期和用户id统计每日新增用户数

已知每日交易的用户id和日期。统计每天,用户id第一次出现的id个数。

c#提供Dictionary<>解决键值对问题。

难点:

1、思路一:先将日期由小到大排序,再将每个日期所对应的用户id需要从数据库中取出,放入数据结构中便于统计这个用户id是否是第一次出现的。若将用户id放入数组或者链表中,从数据库中读取到一个用户id就得顺序查询已保存的数组。查询效率为O(n),但是再加上数据库中的n个数据,所以要完成所以数据的id第一次出现得需要O(n*n)。效率低。

解决:

使用C#的Dictionary<>键值对,键存储用户id。值存储日期。

原因:1、键存用户id是为了从数据库中查询一条用户id后,可以拿新用户id在Dictionary中根据key来快速找到,因为key的查询效率为O(1)。

2、值放日期,可以保证在查询到key后,将新的用户id所对应的时间与已经保存在Dictionary中value的时间进行比较,将小的日期存入。

这样整个用户id及最早出现时间的保存只需要O(n)

保存以后遍历Dictionary。新定义一个Dictionary   res,key放日期,value放这个日期下用户id的个数。

1、将日期提取出来,如果res的key包含了这个日期,就找到以后再value+1.若没有包含,就添加这个key到res中,value设为1.

猜你喜欢

转载自blog.csdn.net/runrun117/article/details/83012737
今日推荐