Un gruppo di amici sta monitorando le miglia per gallone per ciascuna delle loro auto. Ogni volta che uno di loro riempie il serbatoio del gas, registrano quanto segue in un file:
Il suo nome, il tipo di auto che hanno guidato, quante miglia percorse dall'ultima volta che sono state riempite, quanti galloni acquistati a questo riempimento, la data del riempimento.
I loro dati sono formattati come file separati da virgole (csv) con il seguente formato per ogni riga: (# person, carName, milesDriven, gallonsFilled, fillupDate). Per semplicità, sto evitando l'analisi CSV per ora. Le miglia vengono registrate come numeri in virgola mobile e galloni come numeri interi.
L'attività consiste nel creare un programma che consenta ai membri di questo gruppo di determinare le miglia per gallone (MPG) di ciascuna delle loro auto durante un intervallo di tempo specifico. Nota: la persona potrebbe averne più di una, quindi potrebbe essere necessario un intervallo di tempo per l'output dei dati per una o più automobili.
Query: GetRangeMPG (PersonName, StartDate, EndDate) Restituisce un elenco di oggetti contenenti (CarName, MPG)
L'MPG è calcolato come (totale delle miglia percorse durante il periodo di tempo) / (galloni totali riempiti durante il periodo di tempo.
Inoltre, supponiamo che le date immesse come una query corrispondano alle date in cui abbiamo riempito la macchina.
Cercando di capire il modo migliore per archiviare questo tipo di dati, questo è quello che ho di seguito:
Memorizzazione dei dati in un dizionario con PersonName come chiave e Elenco di oggetti di tipo Car. Il metodo GetRangeMPG cercherebbe attraverso questo dizionario l'argomento PersonName fornito e cercherà di trovare l'MPG per le auto di cui la persona è proprietaria.
class Car
{
public string CarName { get; set; }
public double MilesDriven { get; set; }
public int GallonFilled { get; set; }
public DateTime DateFilled { get; set; }
}
class MPGCalc
{
Dictionary<string, List<Car>> log = new Dictionary<string, List<Car>>();
public void LoadData(string inp)
{
string[] lines = inp.Split(new[] { Environment.NewLine },StringSplitOptions.None);
string personName, carName;
double milesDriven;
int gallonsFilled;
DateTime fillupDate;
List<Car> carList = new List<Car>();
foreach(var line in lines)
{
string[] info = line.Split(',');
//(#person,carName,milesDriven,gallonsFilled,fillupDate)
personName = info[0];
carName = info[1];
Double.TryParse(info[2], out milesDriven);
int.TryParse(info[2], out gallonsFilled);
DateTime.TryParse(info[4], out fillupDate);
if(log.ContainsKey(info[0]))
{
log.TryGetValue(personName, out carList);
carList.Add(new Car {CarName = personName, MilesDriven = milesDriven, GallonFilled = gallonsFilled, DateFilled = fillupDate});
log[personName] = carList;
}
else
{
carList.Add(new Car {CarName = personName, MilesDriven = milesDriven, GallonFilled = gallonsFilled, DateFilled = fillupDate});
log.Add(personName, carList);
}
}
}
}
Come sono finiti i miei progressi? Questo è il miglior approccio per affrontare problemi simili a questi?