Определение MPG за промежуток времени с помощью словаря - PullRequest
0 голосов
/ 15 мая 2018

Группа друзей отслеживает мили на галлон для каждого из своих автомобилей.Каждый раз, когда один из них заполняет свой бензобак, они записывают в файл следующее:

Его или ее имя, Тип машины, которую они проехали, Сколько миль проехало с тех пор, как они последний раз заправлялись, Сколько галлоновприобретено при этом заполнении, Дата заполнения.

Их данные отформатированы в виде файла значений с запятой (csv) в следующем формате для каждой строки: (# person, carName, milesDriven, gallonsFilled, fillupDate)Мили записываются как числа с плавающей точкой, а галлоны - как целые числа.

Задача состоит в том, чтобы создать программу, позволяющую членам этой группы определять мили на галлон (MPG) каждого из своих автомобилей в течение определенного промежутка времени.,Примечание: у пользователя может быть больше одного, поэтому запрос временного диапазона может потребовать вывода данных для одного или нескольких автомобилей.

Запрос: GetRangeMPG (PersonName, StartDate, EndDate) Возвращает список объектов, содержащих (CarName, MPG)

MPG рассчитывается как (общее количество пройденных миль за период времени) / (общее количество заполненных галлонов за период времени.

Попытка выяснить лучший способ хранения данных такого типа, вот чтоУ меня есть ниже:

Хранение данных CSV в словаре с PersonName в качестве ключа и списка объектов типа Car. Метод GetRangeMPG будет искать в этом словаре с предоставленным аргументом PersonName и пытаться найти MPG длямашины, которыми владеет человек.

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

Как мой прогресс на данный момент? Является ли этот лучший подход к решению проблем похожим на эти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...