Determinazione dell'MPG in un intervallo di tempo utilizzando Dizionario e Oggetti di classe

-3

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?

    
posta RaksMen 15.05.2018 - 23:37
fonte

1 risposta

0

Questo non indirizza il caricamento dei dati.

Non vorrei usare il dizionario. Solo una collezione di Proprietari e usa LINQ per trovare il Proprietario.

Questo design di classe potrebbe funzionare meglio:

    public List<Owner> Owners { get; } = new List<Owner>();
}   
public class Owner
{
    public string Name { get; set; }
    public List<Car> Cars { get; } = new List<Car>();
}
public class Car
{
    public string CarName { get; set; }
    public List<Trip> Trips { get; } = new List<Trip>();
}
public class Trip
{
    public float MPG
    {
        get
        {
            return GallonFilled == 0 ? 0 :  MilesDriven / GallonFilled;
        }
    }
    public float MilesDriven { get; set; }
    public float GallonFilled { get; set; }
    public DateTime DateFilled { get; set; }
}
    
risposta data 20.05.2018 - 00:46
fonte

Leggi altre domande sui tag