public Result GetResult(string resultKey) { Result result = ResultContainer[resultKey]; lock (_SyncLock) { int currentHits = result.Hits; if (PopularityContainer.ContainsKey(currentHits) && PopularityContainer[currentHits].Contains(result)) { PopularityContainer[currentHits].Remove(result); } if (!PopularityContainer.ContainsKey(currentHits + 1)) { PopularityContainer.Add(currentHits + 1, new List <Result>()); } PopularityContainer[currentHits].Add(Result); if ((currentHits + 1) > MaxPopularity) { MaxPopularity = currentHits + 1; } } return(result); }
public void WritePopularity() { //Here could also extract the keys to a List<Int32>, sort it, and walk that. for (int i = MaxPopularity; i >= 0; i--) { if (PopularityContainer.Contains(i) && PopularityContainer[i].Count > 0) { //NB the order of items at key[i] is the order in which they achieved their popularity foreach (Result result in PopularityContainer[i]) { Console.WriteLine(String.Format("{0} has had {1} hits", result.ToString(), i)); } } } }