2016-06-12 135 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」列,其他字符串將進入值列。

我正在考慮做一個for循環,但我不知道這是否是最有效的方法。什麼會更有效率,我將如何實現這一目標?

+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循環就足夠了。最有效的方法是隻循環一次循環來分隔id和值。

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