2017-01-14 4 views
0

У меня есть строка, как подКак преобразовать строку в double [,]?

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

вам понадобится 'double []' или 'double [,]', 1D или 2D массив. Поскольку вы уже преобразовали в строку [], все, что требуется для массива 1 D, - это что-то вроде Convert.ToDouble для каждого строкового значения, но не так, как вы хотите получить 2D-массив, что будет там заполнено. –

+0

Мне нужно 2d .... выход shoudl be { {22.57891304, 88.34285622}, {22.54398196, 88.38221001} }; –

+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]; 
+0

ОП запросил 2D-массив, а не шахматный массив. – Dai

+0

@ Дай Есть довольно простой и быстрый способ конвертировать между ними. Позвольте мне посмотреть, могу ли я найти фрагмент кода. – Abion47

+0

@ Дай Там есть смешанные сигналы, потому что в фрагменте под «конечный вывод должен выглядеть», OP имеет вложенные массивы. –

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
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]); 
} 
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 можно распечатать т o проверьте значения 2D-массива

Смежные вопросы