将单个字符串转换为嵌套列表阵列
问题描述:
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++) { }
}
答
使用.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 - 不客气 –
请分享你的尝试。 –
我可以尝试上述解决方案,但有没有最快的方法来实现上述问题的解决方案在c# –
说实话,这是丑陋的。我会为你的数据创建一个类,或者至少使用* Tuples *。 – Robert