You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分二维数组字符串并映射值到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:57:56