如何在c#中创建新的数组,从两个双精度数组中减去值

本文关键字:数组 两个 双精度 创建 | 更新日期: 2023-09-27 18:08:19

这是我的问题,我有两个数组都有双值

(这是一个函数,从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;

我在这个数据中的值看起来像(f)。Data1 = (x11, x12,…)x1 (n)):

53.11818160073043,
53.11816348903661,
53.11814874695463,
...

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

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

我想要回data3 = (x31=x11-x21, x32=x12=x22,…(3 n) = x (1 n) - x (2 n))

如果包含以下条件就好了:如果Data1 = (1,5,6,8)Data2 = (1.5, 3.3)

data3 =(-0.5, 1.7)不是data3 = (-0.5, 1.7, 6, 8)

请帮。

如何在c#中创建新的数组,从两个双精度数组中减去值

假设这两个数组长度相同,且类型为double[],那么LINQ可以轻松地使用Enumerable.Zip:

using System.Linq;
// …
var result = data1.Zip(data2, (d1, d2) => d1 - d2).ToArray();

传递的lambda函数应用于两个数组中每一对连续的元素。

这是我代码的下一部分。我用它来绘制一个图表,显示接收器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);
    }