Как создать новый массив, который вычитает значения из 2 двойных массивов в C #?

1

Helou это моя проблема, у меня есть 2 массив, которые имеют двойные значения:

(это функция, возвращающая значения (широта) из richTextBox)

  private Tuple<double>[] szerokosc(string[] lines)
    {
        return Array.ConvertAll(lines, line =>
        {   
            string[] elems = line.Split(',');
            double we = 0.01 * double.Parse(elems[3], EnglishCulture);
            int stopnie = (int)we;
            double minuty = ((we - stopnie) * 100) / 60;
            double szerokosc_dziesietna = stopnie + minuty;
            return new Tuple<double>(Math.Round(szerokosc_dziesietna, (int)numericUpDown2.Value));
        });
        ;
    }

(эта часть функции кодового вызова)

var data1 = szerokosc(szerdlugeo_diag_gps.Lines);
var data2 = szerokosc(szerdlugeo_diag_gpsglonass.Lines);

Что мне делать, чтобы получить что-то вроде этого:

например: var data3 = data1 - data2;

Мои значения в этих данных выглядят как (fe) data1 = (x11, x12,... x1 (n)):

53.11818160073043,
53.11816348903661,
53.11814874695463,
...

data2 = (x21, x22,... x (2n)):

53.11814200771546,
53.118131477652156,
53.11812263239697,
53.11811884157276,
53.11811631435644,
....

Я хотел бы вернуть data3 = (x31 = x11 -x 21, x32 = x12 = x22,... x (3n) = x (1n) -x (2n))

Было бы хорошо, если бы оно включало следующее условие: если data1 = (1, 5, 6, 8) data2 = (1.5, 3.3)

data3 = (-0.5, 1.7) not data3 = (-0.5, 1.7, 6, 8)

Пожалуйста помоги.

Теги:
arrays
subtraction

2 ответа

2
Лучший ответ

Предполагая, что два массива имеют одинаковую длину и тип double[] LINQ упрощает работу с Enumerable.Zip:

using System.Linq;
// …

var result = data1.Zip(data2, (d1, d2) => d1 - d2).ToArray();

Проходящая лямбда-функция применяется к каждой последовательной паре элементов из двух массивов.

  • 1
    Спасибо, но у меня ошибка: «Оператор ошибки 1» - нельзя применить к операндам типа «System.Tuple <double>» и «System.Tuple <double>»
  • 0
    @TomekeM: обратите внимание на первый абзац этого ответа, а затем в своем вопросе вы решительно подразумеваете, что это так (хотя это не полностью соответствует примеру кода: т. Е. Ваш Q не согласован). Но просто отрегулируйте лямбда-выражение, чтобы извлечь правильный член: например. (d1, d2) => d1.Item1 - d2.Item2) .
Показать ещё 1 комментарий
0

Это следующая часть моего кода. Я использую его для построения графика, который показывает разницу в широте между приемником GPS и приемником GNSS. Может быть, это будет полезно для кого-то. Спасибо за помощь с "var result = data1.Zip..." :)

 private void button1_Click(object sender, EventArgs e)
    {
        var data1 = szerokosc(szerdlugeo_diag_gps.Lines);
        var data2 = szerokosc(szerdlugeo_diag_gpsglonass.Lines);

        var data_finish = data1.Zip(data2, (d1, d2) => d2.Item1 - d1.Item1).ToArray();

        var minimalna1 = data_finish.Min();
        var maksymalna1 = data_finish.Max();

        chart9.ChartAreas[0].AxisY.Minimum = minimalna1;
        chart9.ChartAreas[0].AxisY.Maximum = maksymalna1;

        Series series333 = new Series("DGPS") { ChartType = SeriesChartType.Line, BorderWidth = 1, MarkerSize = 3, MarkerStyle = MarkerStyle.Square, Color = Color.Blue };
        foreach (var p in data_finish)
            series333.Points.Add(p);
        chart9.Series.Add(series333);
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню