【问题标题】:remove null items from a multidimensional array in C#从 C# 中的多维数组中删除空项
【发布时间】:2016-11-16 13:18:09
【问题描述】:

考虑以下数组:

object[,] output = new object[5,3]{{"A",false,123},{"B",false,12},{"C",true,456},{null,null,null},{null,null,null}};

如果我们要删除空项,正确的代码是什么?

【问题讨论】:

  • 您不能从数组中删除任何项目。
  • 您想如何删除这些项目?数组是固定大小的。
  • LINQ 是一种 查询 语言。它不会删除任何东西。如果要过滤数据,请使用Where
  • 一开始不添加{null,null,null}的数组不是更简单吗?
  • @Ehsan.Da 您能否更改其他方法以返回列表而不是数组,以便不需要传递 nulls?

标签: c#


【解决方案1】:

你的空对象总是在多维数组的末尾吗?

如果是这样,请使用类似的方法删除空项:

    private static void ReDimMultiObjects(ref object[,] arr, int length)
    {
        object[,] arrTemp = new object[length, 3];//New number of objects, and 3 elements in each object
        if (length > arr.Length / 3)//Array Length is always total elements - would be 15 for 5 objects with 3 elements each
        {
            Array.Copy(arr, 0, arrTemp, 0, arr.Length);
            arr = arrTemp;
        }
        else
        {
            Array.Copy(arr, 0, arrTemp, 0, length * 3);
            arr = arrTemp;
        }
    }

然后从您的程序中使用以下调用:

ReDimMultiObjects(参考输出, 3);

这会将输出数组缩小为 3 个对象,每个对象包含 3 个元素。

【讨论】:

    【解决方案2】:

    最后我用下面的方法解决了多维数组的问题:

    public object[,] clear_array_nulls(object[,] input)
        {
            int m = input.GetUpperBound(0);
            int n = input.GetUpperBound(1) + 1;
            object[] temp = new object[input.GetUpperBound(0)];
            for (int x = 0; x < m; x++)
                temp[x] = input[x, 0];
            temp = temp.Where(s => !object.Equals(s, null)).ToArray();
            object[,] output = new object[temp.Length, n];
            Array.Copy(input, output, temp.Length * n);
            return output;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 2018-07-26
      • 2017-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多