2016-06-12 3 views
0

Извините, что за то, что я не был настолько ясен заранее, мне очень сложно описать. Сейчас у меня проблема с управлением данными. У меня есть строка в базе данных для графических данных.Разделить одноразмерную матрицу на 2 массива

f0||Title Text||f1||Subtitle Text||f2||Option 1||f3||Option 2 

Прямо сейчас, я могу запросить данные и разделить строку, показанную выше, в одномерный массив, используя эту «||» разделитель. На данный момент код выглядит следующим образом.

MySQLHandler handler = new MySQLHandler(this.text_DataIP.Text.ToString()); 
     List<string>[] data = handler.SelectCG("graphics", text_CGBuffer.Text.ToString()); 
     string x = data[2][0].ToString(); 
     string[] y = x.Split(new string[] { "||" }, StringSplitOptions.None); 
     // For each string in the new string array, lets separate them into their own strings for adding to the DataSet 
     for (int n = 0; n < y.Length;) 

     DataSet dataset = new DataSet(); 
     DataTable table = dataset.Tables.Add(); 
     table.Columns.Add("fieldid"); 
     table.Columns.Add("values"); 

Что отсутствует код, который для каждой другой строки в массиве, он будет чередоваться в добавлении данных в DataTable. Например, «f0, f1, f2, f3» войдут в столбец «fieldid», а остальные строки войдут в столбец значений.

Я думал о выполнении цикла цикла, но я не знаю, является ли это наиболее эффективным способом его выполнения. Что было бы более эффективным и как я мог бы это достичь?

+0

Будет ли эта строка иметь отношение столбца 1 к 1 для значений? Или будет больше столбцов и значений? – jwatts1980

+0

Это всегда будет соотношение 1 к 1. Причина, по которой я не размещаю несколько столбцов в таблице базы данных, заключается в том, что формат данных может измениться в последующих итерациях программного обеспечения, поэтому я буду в будущем проверять. –

ответ

1

Вот пример, который я тестировал. Я думаю, это сработает для вас:

string x = "f0||Title Text||f1||Subtitle Text||f2||Option 1||f3||Option 2"; 
string[] y = x.Split(new string[] { "||" }, StringSplitOptions.None); 

DataSet ds = new DataSet(); 
DataTable dt = ds.Tables.Add(); 
List<object> rowvalues = new List<object>(); //to hold the row values 

//Loop through 2 at a time, 
for (int n = 0; n < y.Length; n = n + 2) 
{ 
    dt.Columns.Add(y[n]); //add the column 
    rowvalues.Add(y[n + 1]); //and save the value 
} 

//Create the row 
var dr = dt.NewRow(); 
//Set the row values 
dr.ItemArray = rowvalues.ToArray(); 
+0

Эй. Какие изменения необходимо сделать, чтобы использовать только 2 столбца? «f0, f1, f2» должны быть в 1 столбце, но относиться к той же строке, что и данные рядом с ним. Из того, что я могу сказать, каждый раз создается новый столбец. –

+0

@TaylorBroad я не понимаю ... – jwatts1980

0

Для петли достаточно. Самый эффективный способ - перебрать цикл только один раз, чтобы отделить идентификатор и значение.

 for (int i = 0; i < y.Length; i++) 
     { 
      string fieldid = y[i]; 
      string value = y[++i]; 
     }