【问题标题】:Get "corners" of a 2d array获取二维数组的“角”
【发布时间】:2021-10-10 03:31:46
【问题描述】:

我有一个可以为空的整数的二维数组(尝试猜测它的确切用途)。
由此,我想从第一行和最后一行中获取第一个和最后一个非空元素。

我该怎么做?

class Foo
{
    int?[,] array = new int?[3,9]
    {
        { null ,   13 , 21   , null , null ,   52 ,   69 , 76 , null },
        {    9 ,   15 , null ,   36 ,   45 , null , null , 77 , null },
        { null , null , null ,   39 ,   48 ,   53 , null , 79 ,   87 },
    };
}

【问题讨论】:

标签: c# arrays .net multidimensional-array


【解决方案1】:

由此,我想分别从第一行和最后一行获取第一个和最后一个非空元素。

2D 数组很麻烦,但是如果你对它们进行迭代,它们的行为就像一个长数组

var w = array.GetLength(1);
var h = array.GetLength(0);
var a = array.Cast<int?>();

var ff = a.First(e => e.HasValue);
var fl = a.Take(w).Last(e => e.HasValue);
var lf = a.Skip((h-1)*w).First(e => e.HasValue);
var ll = a.Last(e => e.HasValue);

Width 为 9,Height 为 3,Casting 将其转换为 int? 的可枚举,这意味着您的角是第一个非 null,最初 9 中的最后一个非 null,跳过 18 后的第一个非 null 和最后一个非空

【讨论】:

  • “2D 数组让人头疼” - 哈哈。是的,我很惊讶 C# 至少不是 row-major
猜你喜欢
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多