Вы должны использовать эту перегрузку Union () (с помощью специального сопоставления равенства) или что-то вроде этого:
list1.Concat(list2).GroupBy(x => x.DateProperty).Select(m => m.First());
Первое решение, безусловно, более эффективно.
Имея
float leftArray[numberOfDatums/2];
float rightArray[numberOfDatums/2];
в
if (i >= numberOfDatums/2)
{
//leftArray SOMEHOW GETS CHANGED INSTEAD OF RIGHT ARRAY
rightArray[i] = dataValues[i];
вы выходите из rightArray и случайным образом записываете в leftArray (конечно, это неопределенное поведение)
должно быть
if (i >= numberOfDatums/2)
{
rightArray[i - numberOfDatums/2] = dataValues[i];
Кроме того, иметь
if (i < numberOfDatums/2)
{
...
}
if (i >= numberOfDatums/2)
с i без изменений бесполезно, второе , если может быть , еще , но также лучше сделать два для , чтобы не делать numberOfDatums/2
все время, просто чтобы решить, какой массив использовать.