2017-08-31 94 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 - 不客气 –