Как преобразовать строку в 2D массив double? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть эта переменная:

string coord = "[[1,2,3,4], [5,6,7,8], ...]";

И в конце я ожидаю, что будет:

double[][] d = [[1,2,3,4], [5,6,7,8], ...]

Вот код, который я уже пробовал:

double[] d = coord.Split(",").Select(n => Convert.ToDouble(n)).ToArray();

Это дает мне ошибку: System.FormatException: 'Входная строка была в неправильном формате.' Мой вопрос:

  1. Как устранить вышеуказанную ошибку?

  2. Есть ли какие-либо подходящие способы сделать это преобразование, если у кого-то есть псевдо- код для решения этого преобразования мне действительно очень помогает.

Обновление:

Вот псевдокод, который приходит мне в голову:

//convert string to one-dimensional array of double
//grap every 4 elements to be put on a single array
//add a single array that consist of 4 elements to the 2-dimensional array of double.
//Verify the result

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Кажется, ваша строка в формате JSON (Быстрый поиск в Google скажет вам, что это такое, если вы с ним не знакомы)

Почему бы вам просто не использовать System.Text. Json или Newtonsoft. JSON (необходимо установить секунду через NuGet)?

Код будет выглядеть следующим образом:

string input = "[[1,2,3,4], [12,1,52,3], [1,4,2,3]]";
double[][] output = System.Text.Json.JsonSerializer.Deserialize<double[][]>(input);
0 голосов
/ 09 апреля 2020

Вы можете попробовать это.

То, что он делает, это

//convert string to string[] with elements like "1,2,3,4", "5,6,7,8"
//convert each "1,2,3,4" in the array to string[] { "1", "2", "3", "4" }
    // Now we have string[][] = { { "1","2","3","4" }, { "5","6","7","8" } }
//convert each string[] to double[] by applying Double.Parse

var d = Array.ConvertAll<string[], double[]>
(
    coord.Replace(" ", "").Replace("],[", "|").Replace("[", "").Replace("]", "").Split('|')
    .Select(n => n.Split(','))
    .ToArray(),
    n => Array.ConvertAll(n, Double.Parse)
);
...