Как правильно выполнять арифметические операции над двумя списками / массивами - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть 2Arrays двойников, на которых мне нужно выполнять арифметические операции (+, -, /, *)

Array1 = d1 , d2, d3, d4, d5, d6,  ,   , d9, d10
Array2 =          d3, d4,   , d6,  , d8, d9, d10
Operation = "+";

Правка Выше Пустые элементы показаны только дляпредставление данных, все они хранятся без пробелов

Array1 = d1, d2, d3, d4, d5, d6, d9, d10
Array2 = d3, d4, d6, d8, d9, d10

Req Output

ArrayOpt = 

[0] = d3+d3

[1] = d4+d4;

[2] = d5+d4;

[3] = d6+d6;

[4] = d6+d8;

[5] = d9+d9;

[6] = d10+d10;

Что я пробовал

  int i = 0, PreviousIndex = -1;
   int SecondaryIndex = 0;

 // check if there is a gap
if (SecondaryIndex < DATES2.Length && Convert.ToInt32(d) != Convert.ToInt32(DATES2[SecondaryIndex]))
{
        // first value of index contain the index of second symbol date that matches with first symbol's first date.
        // eg: first data     => d1 d2 d3 d4 d5 d6
        //      2nd data      =>       d3 d4    d6
        // in the above case, the index would be the index of d3.
        index = DATES2.Select((v, j) => new { Index = j, Value = (int)v }).Where(p => p.Value == (int)d).Select(p => p.Index).ToList();
        if (index.Count > 0)
             SecondaryIndex = index[0];
        else
             SecondaryIndex = -1;
}

if(secondaryIndex != -1)
{
    CalculateData(operation, DATES1[i],DATES2[secondaryIndex]);
    PreviousIndex = secondaryIndex;
}
else
{
   CalculateData(operation, DATES1[i],DATES2[PreviousIndex]);
}

i++;
secondaryIndex++;

но результат такой:

d1, d2, d3, d4, d5, d6, d9, d10
+
d3, d4, d6, d8, d9, d10

Кто-нибудь может подсказать, в чем проблема или какое-нибудь другое лучшее решение?

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете использовать библиотеку Math.Net для выполнения базовых операций линейной алгебры и всех видов матричных операций, которые вы, возможно, захотите использовать.Как вы можете видеть в приведенных примерах основных операций линейной алгебры (+, *, -, /).

Кроме того, поскольку ваши матрицы являются одномерными, вы можете суммировать индексы Array1 и Array2, как показано ниже, содинарный для цикла.

var a1 = new int[5] {1,2,3,4,5}; 
var a2 = new int[7] {1,2,3,4,5,6,7};

var maxLength = a1.Length > a2.Length ? a1.Length : a2.Length;

var outputArray = new int[maxLength];

for(var i = 0; i < maxLength; i++)
{
    if(a1.Length < i + 1)
    {
        outputArray[i] = a2[i];
        continue;
    }

    if(a2.Length < i + 1)
    {
        outputArray[i] = a1[i];
        continue;
    }

    outputArray[i] = a1[i] + a2[i];
}

Console.Write(outputArray.GetValue(6));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...