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)
Пожалуйста помоги.
Предполагая, что два массива имеют одинаковую длину и тип double[]
LINQ упрощает работу с Enumerable.Zip
:
using System.Linq;
// …
var result = data1.Zip(data2, (d1, d2) => d1 - d2).ToArray();
Проходящая лямбда-функция применяется к каждой последовательной паре элементов из двух массивов.
Это следующая часть моего кода. Я использую его для построения графика, который показывает разницу в широте между приемником 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);
}
(d1, d2) => d1.Item1 - d2.Item2)
.