如何拆分二维数组字符串并映射值到List<HeadCurve>属性
正确实现二维数组字符串拆分并赋值给HeadCurve类的方案
给定如下二维数组格式的字符串:
string student = "[[999.33333333333,334.9949949994,-233333.44444,3499.4444444,-3939393.9393993993], [991.33333333333,331.9949949994,-233337.44444,34979.4444444,-8939393.9393993993]]";
需要将第一个子数组的每个元素与第二个子数组的对应元素配对,分别赋值给自定义类HeadCurve的head和flow属性,最终生成List<HeadCurve>集合。
原代码存在的问题
- 遍历字符串单个字符拆分数组,逻辑完全错误,无法正确提取子数组和元素
- 每次循环都新建
HeadCurve实例,导致集合中对象全为重复错误数据 - 对
headcurve == null的判断无意义,因为刚执行headcurve = new HeadCurve();,实例不可能为空 - 未实现“对应元素配对赋值”的核心逻辑
正确实现方案
方案一:手动字符串处理拆分
通过去除括号、空格,分割出子数组和元素后配对赋值:
using System; using System.Collections.Generic; using System.Linq; public class HeadCurve { public string Head { get; set; } public string Flow { get; set; } } class Program { static void Main(string[] args) { string student = "[[999.33333333333,334.9949949994,-233333.44444,3499.4444444,-3939393.9393993993]," + "[991.33333333333,331.9949949994,-233337.44444,34979.4444444,-8939393.9393993993]]"; // 清理字符串并分割出两个子数组 var cleanedStr = student.TrimStart('[').TrimEnd(']'); var subArrays = cleanedStr.Split(new[] { "],[" }, StringSplitOptions.RemoveEmptyEntries); // 拆分每个子数组的元素 var headElements = subArrays[0].Split(',').Select(s => s.Trim()).ToList(); var flowElements = subArrays[1].Split(',').Select(s => s.Trim()).ToList(); // 配对元素生成集合 List<HeadCurve> list = new List<HeadCurve>(); for (int i = 0; i < headElements.Count; i++) { if (i < flowElements.Count) { list.Add(new HeadCurve { Head = headElements[i], Flow = flowElements[i] }); } } // 测试输出 foreach (var item in list) { Console.WriteLine($"Head: {item.Head}, Flow: {item.Flow}"); } } }
方案二:JSON序列化解析(更简洁可靠)
输入字符串是标准JSON二维数组格式,用内置序列化工具解析更高效:
using System; using System.Collections.Generic; using System.Text.Json; public class HeadCurve { public string Head { get; set; } public string Flow { get; set; } } class Program { static void Main(string[] args) { string student = "[[999.33333333333,334.9949949994,-233333.44444,3499.4444444,-3939393.9393993993]," + "[991.33333333333,331.9949949994,-233337.44444,34979.4444444,-8939393.9393993993]]"; // 反序列化为二维字符串数组 var data = JsonSerializer.Deserialize<string[][]>(student); List<HeadCurve> list = new List<HeadCurve>(); for (int i = 0; i < data[0].Length; i++) { if (i < data[1].Length) { list.Add(new HeadCurve { Head = data[0][i], Flow = data[1][i] }); } } // 测试输出 foreach (var item in list) { Console.WriteLine($"Head: {item.Head}, Flow: {item.Flow}"); } } }
补充说明
- 两种方案均实现了子数组对应元素的配对赋值
- 方案二更推荐,JSON解析能自动处理格式细节(如空格、换行),避免手动处理的潜在错误
- 若需要数值类型(如
double)而非字符串,可将HeadCurve的属性类型改为double,反序列化时用double[][]即可
内容的提问来源于stack exchange,提问作者Manish S
相关产品推荐
相关产品推荐

