gpt4 book ai didi

c# - 从不需要的值中修剪 int 的二维数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:00 27 4
gpt4 key购买 nike

我有一个这样声明的数组:

int[,] binaryzacja = new int[bmp2.Width, bmp2.Height];

它的尺寸是图片的尺寸(通常是 200x200)。黑色像素由 1 表示。所有其他像素由 0 表示。

假设我的数组看起来像这样:

0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 1 0 1 1 1 0
0 1 1 1 0 0 0
0 0 1 1 0 0 0
0 0 0 0 0 0 0

我想删除所有仅包含 0 的行列。

所以,如果我的示例数组是 7 列,6 行;我想要一个 5 列 3 行的新数组,如下所示:

1 0 1 1 1
1 1 1 0 0
0 1 1 0 0

最佳答案

您可以将[,] 转换为List:

var list = new List<List<int>>();

for (var i = 0; i < binary.GetLength(0); i++ )
{
var row = new List<int>();
for(var j = 0; j < binary.GetLength(1); j++)
row.Add(binary[i, j]);
list.Add(row);
}

然后删除全为零的行和列:

// Remove the rows
list = list.Where(row => row.Contains(1)).ToList();
// Reverse the matrix and apply the same procedure to remove the columns
list = Transpose(list);
list = list.Where(row => row.Contains(1)).ToList();
// Get back the original order of the rows and columns
list = Transpose(list);

static List<List<int>> Transpose(List<List<int>> input)
{
return input.ElementAt(0).Select((item, index) =>
{
var row = new List<int>{input[0][index]};
input.ForEach(el => row.Add(el.ElementAt(index)));
return row;
}).ToList();
}
}

然后将结果列表转换回 [,]

int[,] binaryResult = new int[list.Count(), list.First().Count()];

for (int i = 0; i < binaryResult.GetLength(0); i++)
for (int j = 0; j < binaryResult.GetLength(1); j++)
binaryResult[i, j] = list.ElementAt(i).ElementAt(j);

当然,您应该将这些提取到方法中。

关于c# - 从不需要的值中修剪 int 的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com