如何将字符串转换为double [,]?

时间:2017-01-14 04:43:09

标签: c#

我在

下面有一个字符串
var str = "22.58277011|88.38303798,22.59950095|88.39352995";

我需要将其转换为double[,] ...

最终输出应该是

{
    {22.57891304, 88.34285622},
    {22.54398196, 88.38221001}
};

到目前为止我的方法

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

之后该怎么办?

4 个答案:

答案 0 :(得分:4)

使用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];

答案 1 :(得分:4)

假设输入始终有效,您可以使用String.Split

 private static readonly Char[] separators = new Char[] { ',', '|' };

 ...

 String input = "22.58277011|88.38303798,22.59950095|88.39352995,";
 String[] numbers = input.Split( separators, StringSplitOptions.RemoveEmptyEntries );
 if( (numbers.Length % 2) != 0 ) throw new ArgumentException("Input did not have an even number of elements.");

 Double[,] array = new Double[ numbers.Length / 2, 2 ];

 for( Int32 i = 0; i < inputs.Length; i += 2 ) {

     String firstStr  = inputs[i    ];
     String secondStr = inputs[i + 1];

     // always parse these decimal values using InvariantCulture to prevent errors on computers set to French or German (for example) where the comma is the radix place
     Decimal first  = Decimal.Parse( firstStr, CultureInfo.InvariantCulture );
     Decimal second = Decimal.Parse( secondStr, CultureInfo.InvariantCulture );

     array[ i / 2, 0 ] = first;
     array[ i / 2, 1 ] = second;
 }

 return array;

答案 2 :(得分:2)

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]);
}

答案 3 :(得分:1)

在运行时创建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数组的值