我在
下面有一个字符串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(',');
之后该怎么办?
答案 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数组的值