【问题标题】:How to convert string to 2D array of double?如何将字符串转换为二维数组?
【发布时间】:2020-04-09 11:23:18
【问题描述】:

我有这个变量:

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

【问题讨论】:

  • 你不能用逗号分割,因为你有逗号来描述子数组它们的各个元素。您需要找出一种方法来拆分子数组 first 然后拆分元素。一种可能的解决方案涉及正则表达式,但我相信还有更好的方法。
  • 您可以尝试删除(“trim”)前导和尾随“[”和“]”,然后用“]、[”分割。然后你有一个字符串数组,如“1,2,3,4”和“5,6,7,8”。现在你可以用“,”分割每个元素,并将单个元素转换为双精度。
  • 为什么不使用 JSON.NET 反序列化为(例如匿名)类?

标签: c# multidimensional-array type-conversion


【解决方案1】:

您的字符串似乎是 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);

【讨论】:

  • 直截了当。我删除了我过于复杂的答案。这应该是公认的答案。
【解决方案2】:

你可以试试这个。

它的作用是

//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)
);

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 2019-01-23
    • 2020-02-22
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多