составление данных из многих списков - PullRequest
0 голосов
/ 05 октября 2018

У меня есть 4 экземпляра List<InputElement>, которые содержат пару время-значение, похожую на это

public class InputElement
{
        public MyTime Time;
        public double Value;
}

MyTime хранит время в формате: чч: мм: сс.ууууу - как TimeSpanно с микросекундами и также хранит double TotalSeconds - который показывает, ну, в общем, общее время в секундах (например, 00:01:02.00304 = 62.00034), которое я использовал для сортировки списков

Каждый список загружен уже отсортирован по времени от самого раннего до последнегомомент и хранит различные типы значений.Таким образом, List1 содержит показатели скорости, List2 содержит расстояния и так далее.Длина всех списков составляет около 200 элементов

Я хочу поместить все 4 из них в один List<OutputElement>, где OutputElement выглядит так:

public class OutputElement
    {
        public MyTime Time;

        public double Dp;
        public double Or;
        public double Speed;
        public double Dist;
    }

Проблема в том, что значения могут бытьв разные и одинаковые моменты, поэтому результат должен выглядеть примерно так:

mt1      1    NaN    NaN    NaN
mt2    NaN      3      2    NaN
mt3      2      7    NaN    NaN
mt4      3      6      1      0

Здесь в момент mt1 я сохраняю только значение Dp, потому что три других списка не содержат значения при этоммомент, поэтому три других значения NaN.В то время как в момент mt4 у меня есть все четыре DataElements, потому что все четыре списка содержат значение в тот момент.

Я пытался идти по прямому пути - создал бесконечный цикл while, циклически повторяющий четыре списка с использованием четырех счетчиков

Каждый цикл после множества if случаев я нахожу, какие счетчики увеличивать, а какие сохранять.После циклического перебора всех списков я прерываю цикл while и выхожу.

Все это выглядит как комбинаторная адская дыра, и я был бы очень признателен за более простой подход?

1 Ответ

0 голосов
/ 05 октября 2018

Создать словарь, используя mt в качестве ключа и OutputElement в качестве значения.При переборе своих списков посмотрите, содержит ли коллекция ключей словаря значение mt.Если это так, то получите соответствующий OutputElement и установите членов по мере необходимости.Если в коллекции ключей словаря нет значения mt, создайте новый экземпляр OutputElement, задайте необходимые члены и добавьте его в словарь.

Что касается итерации списков, вы можете выполнить итерацию каждого списка.независимо, или вы можете получить количество элементов в самом длинном списке и вернуться к этому количеству.Если вы делаете последнее, вам просто нужно убедиться, что индексная переменная не превышает количество элементов в списке.

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