2013-08-06 12 views
6

Sto cercando una procedura ottimale per il conteggio di quante volte ciascuna data si verifica in un elenco.C# Best practice: contare quante volte ciascuna data si verifica

Per ora, ho un codice funzionante (appena testato) ma penso che il modo in cui l'ho fatto non sia così buono.

var dates = new List<DateTime>(); 
//Fill list here 

var dateCounter = new Dictionary<DateTime, int>(); 

foreach (var dateTime in dates) 
{ 
    if (dateCounter.ContainsKey(dateTime)) 
    { 
     //Increase count 
     dateCounter[dateTime] = dateCounter[dateTime] + 1; 
    } 
    else 
    { 
     //Add to dictionary 
     dateCounter.Add(dateTime, 1); 
    } 
} 

Chi conosce una soluzione migliore?

+0

FYI: Il problema principale che avrei con questo è per ogni data ripetuto, si guarda nella lista 3 volte ('Contains' e ogni' dateCounter [data_ora] '). Può essere fatto con una sola ricerca. –

risposta

9
dates.GroupBy(d => d).ToDictionary(g => g.Key, g => g.Count()); 
+1

Vorrei poter digitare più veloce :) – SQLMason

+0

@DanAndrews Haha: P In realtà non sono così veloce un typer ... –

+0

Grazie, prendendo questo come risposta in 8 minuti;) –