1. 程式人生 > >c# 根據日期和使用者id統計每日新增使用者數

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.