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

C#如何获取二维布尔数组中已使用的最大索引

获取二维布尔数组中已赋值元素的最大索引

方案一:赋值时实时记录最大索引(推荐)

这种方法简单高效,不用事后遍历整个数组。每次给元素赋值时,同步更新当前的最大X、Y索引即可,很适合刚接触C#的新手。

基础实现代码

// 初始化二维布尔数组,这里X维度长度3,Y维度长度4
bool[,] booleans = new bool[3, 4];
int maxX = -1;
int maxY = -1;

// 赋值同时更新最大索引
booleans[0, 0] = false;
maxX = Math.Max(maxX, 0);
maxY = Math.Max(maxY, 0);

booleans[0, 1] = false;
maxX = Math.Max(maxX, 0);
maxY = Math.Max(maxY, 1);

booleans[1, 0] = false;
maxX = Math.Max(maxX, 1);
maxY = Math.Max(maxY, 0);

booleans[1, 1] = false;
maxX = Math.Max(maxX, 1);
maxY = Math.Max(maxY, 1);

booleans[2, 3] = false;
maxX = Math.Max(maxX, 2);
maxY = Math.Max(maxY, 3);

// 输出结果
Console.WriteLine($"最大X索引:{maxX},最大Y索引:{maxY}");

封装成方法简化代码

如果需要多次赋值,把逻辑封装成方法可以避免重复代码:

static void AssignAndTrackMax(bool[,] arr, int x, int y, bool value, ref int maxX, ref int maxY)
{
    arr[x, y] = value;
    maxX = Math.Max(maxX, x);
    maxY = Math.Max(maxY, y);
}

// 使用封装后的方法
bool[,] booleans = new bool[3, 4];
int maxX = -1;
int maxY = -1;

AssignAndTrackMax(booleans, 0, 0, false, ref maxX, ref maxY);
AssignAndTrackMax(booleans, 0, 1, false, ref maxX, ref maxY);
AssignAndTrackMax(booleans, 1, 0, false, ref maxX, ref maxY);
AssignAndTrackMax(booleans, 1, 1, false, ref maxX, ref maxY);
AssignAndTrackMax(booleans, 2, 3, false, ref maxX, ref maxY);

Console.WriteLine($"最大X索引:{maxX},最大Y索引:{maxY}");

方案二:遍历数组查找(需区分已使用元素)

C#中普通bool数组的默认值是false,如果你的“已使用”元素也是false,没法直接通过值区分手动赋值和默认元素。这时候可以用两种方式解决:

方式1:使用可空布尔数组(bool?)

可空布尔数组的默认值是null,手动赋值的元素会是true或false,以此区分是否被使用:

// 初始化可空布尔数组
bool?[,] booleans = new bool?[3, 4];
// 手动标记已使用的元素
booleans[0, 0] = false;
booleans[0, 1] = false;
booleans[1, 0] = false;
booleans[1, 1] = false;
booleans[2, 3] = false;

int maxX = -1;
int maxY = -1;

// 遍历所有元素
for (int x = 0; x < booleans.GetLength(0); x++)
{
    for (int y = 0; y < booleans.GetLength(1); y++)
    {
        // 判断元素是否被手动赋值(不为null)
        if (booleans[x, y] != null)
        {
            maxX = Math.Max(maxX, x);
            maxY = Math.Max(maxY, y);
        }
    }
}

Console.WriteLine($"最大X索引:{maxX},最大Y索引:{maxY}");

方式2:约定已使用元素为true

如果可以调整规则,用true标记已使用元素,默认false代表未使用,直接遍历判断值即可:

bool[,] booleans = new bool[3, 4];
// 已使用元素设为true
booleans[0, 0] = true;
booleans[0, 1] = true;
booleans[1, 0] = true;
booleans[1, 1] = true;
booleans[2, 3] = true;

int maxX = -1;
int maxY = -1;

for (int x = 0; x < booleans.GetLength(0); x++)
{
    for (int y = 0; y < booleans.GetLength(1); y++)
    {
        if (booleans[x, y])
        {
            maxX = Math.Max(maxX, x);
            maxY = Math.Max(maxY, y);
        }
    }
}

Console.WriteLine($"最大X索引:{maxX},最大Y索引:{maxY}");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:15:34