2017-08-31 134 views
-2

String value =「71.08099899999999,24.10229 // 71.08099899999999,24.102665 /// 71.080874,24.10279 // 71.080749,24.102915」;「將單個字符串轉換爲嵌套列表陣列

嵌套數組列表

List<List<List<decimal>>> Arr = [ 
    [ 
     [ 
      [71.08099899999999][24.10229] 
     ][ 
      [71.08099899999999][24.102665] 
     ] 
    ][ 
     [ 
      [71.080874][24.10279] 
     ][ 
      [71.080749][24.102915] 
     ] 
    ] 
]; 

我曾試圖utill現在:

List<List<string>> val1 = new List<List<string>>(); 
List<List<List<string>>> val2 = new List<List<List<string>>>(); 

string[] val = value .Split(new string[] { " /// " }, StringSplitOptions.None); 
for (int i = 0; i < val.Length - 1; i++) 
{ 
    val1.Add(val[i].Split(new string[] { " // " }, StringSplitOptions.None).ToList()); 
} 

for (int i = 0; i < val1.Count; i++) 
{ 
    for (int j = 0; j < val1[i].Count-1; i++) { } 
} 
+0

請分享你的嘗試。 –

+0

我可以嘗試上述解決方案,但有沒有最快的方法來實現上述問題的解決方案在c# –

+0

說實話,這是醜陋的。我會爲你的數據創建一個類,或者至少使用* Tuples *。 – Robert

回答

2

使用.Split和LINQ .Select

var result = value.Split(new[] { "///" }, StringSplitOptions.None).Select(lvl1 => 
       lvl1.Split(new[] { "//" }, StringSplitOptions.None).Select(lvl2 => 
        lvl2.Split(',').Select(val => 
         decimal.Parse(val.Trim())).ToList()).ToList()).ToList(); 

請注意,這將失敗,如果一個的值不是有效的小數。爲了確保您可以投影decimal?和使用decimal.TryParse,然後Select唯一的非空項

作爲一個側面說明有這麼多的嵌套集合..似乎是一個設計的氣味。考慮思考一個不同的設計

+0

非常感謝你@giladgreen –

+1

@SimarjeetSinghPanghlia - 不客氣 –