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

如何合并object[][]类型交错数组的最后两列并移除最后一列?

问题解决:合并交错数组时去除多余嵌套结构

问题描述

我有一个10行5列的object[][]类型交错数组,需要将最后两列合并至倒数第二列,并移除最后一列。例如原数组第一行的sampleData[3]为含2个元素的object[],sampleData[4]为含1个元素的object[];合并后sampleData[3]应包含3个元素,同时移除sampleData[4]。但我编写的代码运行后,合并后的sampleData[3]出现多余的{object[1]}嵌套结构,需要去除该层级。

尝试的代码

public static object[][] MergeResults(object[][] sampleData)
{
    
    object[] mergedArray, actualData;
    object[][]results;
    if(sameplData != null && samepleData.Any())
    {
    int row = 0;
    int totalNoOfColumns = sampleData[0].length;
    int noOfColumns = totalNoOfColumns; 
    results = new object[sampleData.Count()][];
    int objectCount = sampleData[0].Where(x=>x.GetType().Name == "object[]").Count();
    
        foreach(var item in sampleData)
    {
        mergedArray = new object[totalNoOfColumns -1];
        actualData = new object[objectCount];
        int j = 0;
        
        for (int i= 0; i < (item.Length - 1); i++)
        {
          if(item[i].GetType().Name == "object[]")
        {
        int k = 0;
        while (i < totalNoOfColumns)
        {
        actualData[k] = item[i];
        i++;k++;
        }
        mergedArray[noOfColumns- 2] = actualData;
        }
        else
        {
        mergedArray[j] = item[i];
        j++
        }
        }
        results[row] = mergedArray;
        row++;
        }
        }
        return results;
        }

问题原因

你的代码中,将最后两列的object[]直接作为元素存入了actualData数组,相当于把两个数组本身作为元素存储,导致了额外的嵌套层级。正确的做法应该是扁平合并两个数组内的元素,而不是存储数组对象本身。

修正后的代码

public static object[][] MergeResults(object[][] sampleData)
{
    // 空值判断,直接返回原数组
    if (sampleData == null || !sampleData.Any())
        return sampleData;

    int rowCount = sampleData.Length;
    int originalColumnCount = sampleData[0].Length;
    int newColumnCount = originalColumnCount - 1;
    object[][] results = new object[rowCount][];

    for (int row = 0; row < rowCount; row++)
    {
        object[] currentRow = sampleData[row];
        object[] newRow = new object[newColumnCount];

        // 复制前originalColumnCount-2列的内容到新行
        for (int col = 0; col < originalColumnCount - 2; col++)
        {
            newRow[col] = currentRow[col];
        }

        // 安全获取倒数第二列和最后一列的object[]
        var lastSecondCol = currentRow[originalColumnCount - 2] as object[];
        var lastCol = currentRow[originalColumnCount - 1] as object[];

        // 合并两个数组的元素,去除嵌套
        List<object> mergedElements = new List<object>();
        if (lastSecondCol != null)
            mergedElements.AddRange(lastSecondCol);
        if (lastCol != null)
            mergedElements.AddRange(lastCol);

        // 将合并后的元素数组赋值给新行的倒数第二列
        newRow[newColumnCount - 1] = mergedElements.ToArray();

        results[row] = newRow;
    }

    return results;
}

关键改进点

  • 扁平合并元素:通过List<object>的AddRange方法,将两个子数组的元素直接合并到同一个集合中,避免了嵌套
  • 安全类型转换:使用as关键字进行类型转换,同时增加空值判断,防止空引用异常
  • 逻辑简化:拆分复制列、合并元素两个步骤,代码可读性更强

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:30