簡體   English   中英

獲取二維數組的“角”

[英]Get "corners" of a 2d array

好吧,我有一個真正愚蠢的問題。

我有一個可空整數的二維數組。 我想獲得該數組的不可為空的角 - 例如,下面數組的角將是13, 76, 39, 87

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 },
};

由此,我想分別從第一行和最后一行中獲取第一個和最后一個非空元素。

2D arrays 很麻煩,但如果你迭代它們,它們的行為就像一個長數組

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);

寬度為 9,高度為 3,Casting 將其轉換為可枚舉的int? 這意味着你的角落是第一個非 null,最后一個非 null 在最初的 9,第一個非 null 跳過 18 和最后一個非 null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM