как преобразовать один двойной массив в другой двойной массив (пустой) - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть строка, которая составляет

35.318073; 65.741196; 57.335339; 87.758453; +0.573 ;; 42.282722; 92.314201; 64.299988; 114.331459; +0.537 ;; 89.842690; 109.230721; 111.8479; +0.644 ;;

Я использую приведенный ниже код, чтобы разделить его, а затем преобразовать в объект JSON, а затем преобразовать в двойной объект.

if (readByCount > 30)
                {

                    var output = (new string(buff).TrimEnd('\u0000'));
                    Console.WriteLine(output);

                    var output1 = output.Split(new[] { ";;" },StringSplitOptions.RemoveEmptyEntries).Select(s => s.Split(';')).ToArray();

                    JToken jsonParsed = JToken.FromObject(output1);

                    List<double> zcoordinate = new List<double>();
                    double zaxis = 0.0;
                    double[] MediumArray = { 0,0 };
                    double zCoordinateMin = 0.0;



                    foreach (var arrayItem in jsonParsed)
                    {
                        var innerArray = arrayItem.ToObject<double[]>();
                        MediumArray.Append<double[]>(innerArray);

                        zaxis = innerArray.ElementAt<double>(4);
                        zcoordinate.Add(zaxis);
                        foreach (var item in zcoordinate)
                        {
                            zCoordinateMin = zcoordinate.Min();
                        }
                    }


                    for (int i = 0; i < MediumArray.Length; i++)
                    {
                        if (MediumArray.ElementAt(i) == zCoordinateMin)
                        {
                            Console.WriteLine(MediumArray[0] + MediumArray[1]);
                        }


}

Как видите, из-за формата входной строки for-each l oop будет выполняться трижды. Я хочу сделать свой MediumArray массивом массива, чтобы я мог запустить foreach l oop, чтобы найти MediumArray [0] + MediumArray [1] только для того массива, который имеет наименьшее значение элемента, который находится в позиции 5. (индекс 4).

Я знаю, если у меня mediumArray массив массивов, я не могу использовать для l oop, показанного в моем коде, но мне нужно использовать для каждого l oop что-то вроде:

//foreach (var item in MediumArray)
                        //{


                        //    if (MediumArray.ElementAt(4) == zCoordinateMin)
                        //    {
                        //        Console.WriteLine(MediumArray[0] + MediumArray[1]);
                        //    }
                        //}

Я пытаюсь этот код, но я получаю сообщение об ошибке из-за этой строки.

MediumArray.Append<double[]>(innerArray);

Ошибка говорит:

'double []' не содержит определения для 'Append' и лучшей перегрузки метода расширения 'Enumerable.Append (IEnumerable, double []) 'требуется получатель типа' IEnumerable '

Что я могу сделать, чтобы правильно выполнить процесс?

1 Ответ

0 голосов
/ 09 февраля 2020

Вот запрос Linq, который я придумал, который выполняет эту работу:

var input = "35.318073;65.741196;57.335339;87.758453;+0.573;;42.282722;92.314201;64.299988;114.331459;+0.537;;89.842690;109.230721;111.859947;131.247986;+0.644;;";

var output = input
  .Split(";;")                                    // split input string into the double arrays
  .Where(array => !string.IsNullOrEmpty(array))   // ignore empty array (last one in your example)
  .Select(array => array                          
    .Split(";")                                   // split into single values
    .Select(value => double.Parse(value))         // parse them to doubles
    .ToArray())                                   // join them together as an array
  .ToArray();                                     // join the arrays together as an array

Этот запрос возвращает System.Double[][].

...