2013-08-06 7 views
6

Poszukuję najlepszej praktyki do liczenia ile razy każda data występuje na liście.C# Najlepsza praktyka - Liczenie, ile razy występuje dana data

Na razie mam działający kod (właśnie testowany), ale myślę, że sposób, w jaki to zrobiłem, nie jest tak dobry.

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); 
    } 
} 

Ktoś, kto zna lepsze rozwiązanie?

+0

FYI: Głównym problemem musiałbym z tym jest dla każdego powtarzanego daty, patrzysz się na listę 3 razy ('Contains' i każdy' dateCounter [dateTime] '). Można to zrobić za pomocą tylko jednego wyszukiwania. –

Odpowiedz

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

Chciałbym móc pisać szybciej :) – SQLMason

+0

@DanAndrews Haha: P Nie jestem tak szybki typer ... –

+0

Dzięki, biorąc to jako odpowiedź w 8 minut;) –

Powiązane problemy