C# 如何将字符串转换为双[,]?

C# 如何将字符串转换为双[,]?,c#,C#,我有一根绳子在下面 var str = "22.58277011|88.38303798,22.59950095|88.39352995"; 我需要把它转换成一个双[,] 最后的结果应该是 { {22.57891304, 88.34285622}, {22.54398196, 88.38221001} }; 我目前的做法 var str = "22.58277011|88.38303798,22.59950095|88.39352995,"; var strRep = str

我有一根绳子在下面

var str = "22.58277011|88.38303798,22.59950095|88.39352995";
我需要把它转换成一个双[,]

最后的结果应该是

{
    {22.57891304, 88.34285622},
    {22.54398196, 88.38221001}
};
我目前的做法

var str = "22.58277011|88.38303798,22.59950095|88.39352995,";
var strRep = str.Split(',');

之后该怎么办?

使用LINQ,非常简单:

double[][] arrays = string.Split(',')
                          .Select(s => s.Split('|')
                                        .Select(d => double.Parse(d))
                                        .ToArray())
                          .ToArray();
将其转换为2D数组也很简单,但恐怕LINQ没有这么简单

double[,] arr2d = new int[arrays.Length, arrays[0].Length];

for (int i = 0; i < arr2d.GetLength(0); i++)
    for (int j = 0; j < arr2d.GetLength(1); j++)
        if (i < arrays.Length && j < arrays[i].Length)
            arr2d[i, j] = arrays[i][j];

假设输入始终有效,则可以使用字符串。拆分:


在运行时通过创建2D数组来处理代码,代码当然需要一些基于数据的异常管理

// Input
var str = "22.58277011|88.38303798,22.59950095|88.39352995";

var xAxisList = str.Split(',').ToList(); // Split on Comma
var yAxisList = xAxisList.Select(yy => yy.Split('|').ToList()).ToList(); // Split on |
var xAxisLength = xAxisList.Count; // X Axis count
var yAxisLength = yAxisList.First().Count; // Y Axis Count

var doubleResult = new double[xAxisLength,yAxisLength]; // Create a 2D array

int xCounter = 0;
int yCounter = 0;

foreach (var dataList in yAxisList)
{
    foreach (var data in dataList)
    {
        // Assuming all data can be correctly parsed to double, else it needs an additional check
        doubleResult[xCounter,yCounter] = double.Parse(data);
        yCounter++;
    }
    xCounter++;
    yCounter = 0;
}

可以打印doubleResult来检查2D数组的值

您需要一个double[]或double[,],1D或2D数组。由于您已经转换为字符串[],所以一维数组所需的只是像Convert.ToDouble这样对每个字符串值进行转换,但不是您希望获得二维数组的方式以及填充内容我需要一个二维数组。。。。输出应该是{22.57891304,88.34285622},{22.54398196,88.38221001};按拆分后创建的数组将使每个项都具有字符串|。您需要循环通过第一个数组,并在每个元素中用替换|。在这之后,您将拥有第一个数组,其中包含所有以逗号分隔的字符串的项。您可以将其转换为所需的格式。@Chetan,我按照您的建议执行了str.Split','。Selects=>s.Replace |,;但它是一个字符串数组。如何将这个字符串数组转换为2D双数组?@priyanka这将是下一步要做的事情。数据准备好后,您就可以按您想要的方式处理它了。OP要求的是2D数组,而不是交错数组。@Dai有一种非常简单快捷的方法可以在两者之间进行转换。让我看看我是否能找到代码段。@Dai那里有混合信号,因为在最终输出下面的代码段中,OP应该是嵌套数组。@Dai-Argh,我永远找不到它。有一种非常酷的转换方法,在两行之间转换,不知怎的涉及到马歇尔。。。好吧,这段代码也可以。唯一的问题是代码无法编译,您试图在结果的整数数组中填充double,请将其更改为double[,]
string str = "22.58277011|88.38303798,22.59950095|88.39352995";
var list = str.Split(',').ToList();

var arr = new double[list.Count,2];

for (int i = 0; i < list.Count; i++)
{
    var vals = list[i].Split('|');
    arr[i, 0] = Double.Parse(vals[0]);
    arr[i, 1] = Double.Parse(vals[1]);
}
// Input
var str = "22.58277011|88.38303798,22.59950095|88.39352995";

var xAxisList = str.Split(',').ToList(); // Split on Comma
var yAxisList = xAxisList.Select(yy => yy.Split('|').ToList()).ToList(); // Split on |
var xAxisLength = xAxisList.Count; // X Axis count
var yAxisLength = yAxisList.First().Count; // Y Axis Count

var doubleResult = new double[xAxisLength,yAxisLength]; // Create a 2D array

int xCounter = 0;
int yCounter = 0;

foreach (var dataList in yAxisList)
{
    foreach (var data in dataList)
    {
        // Assuming all data can be correctly parsed to double, else it needs an additional check
        doubleResult[xCounter,yCounter] = double.Parse(data);
        yCounter++;
    }
    xCounter++;
    yCounter = 0;
}