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

Kotlin中如何使用布尔索引表示2×2二维Int数组

在Kotlin中实现布尔索引的二维Int结构

嘿,这个需求其实很好解决!Kotlin里的普通数组确实不支持直接用布尔值当索引,但我们可以通过几种方式模拟出你想要的「布尔键二维结构」,下面给你几个实用的方案:

方案1:嵌套Map(最直观的实现)

这个方式完全贴合你想要的结构,直接用Boolean作为Map的键,嵌套两层Map就可以实现:

// 初始化符合你需求的结构
val booleanIndexedMap = mapOf(
    true to mapOf(
        true to 0,
        false to 75
    ),
    false to mapOf(
        true to 1,
        false to 34
    )
)

// 访问示例
val trueFalseValue = booleanIndexedMap[true]?.get(false) // 结果是75
val falseTrueValue = booleanIndexedMap[false]?.get(true) // 结果是1

优点:和你描述的结构完全对应,可读性拉满,不需要额外转换逻辑;
缺点:相比数组性能略低,但对于2×2的规模来说完全可以忽略。

方案2:封装普通二维数组(高性能选择)

如果想要保留数组的高性能,我们可以利用布尔值和整数索引的映射关系,封装一个普通二维数组,再通过扩展函数实现布尔索引的访问:

// 先按「true行、false行」「true列、false列」的顺序初始化普通二维数组
val intArray = arrayOf(
    intArrayOf(0, 75), // true行:[true列值, false列值]
    intArrayOf(1, 34)  // false行:[true列值, false列值]
)

// 扩展函数:用布尔值获取对应位置的元素
fun Array<IntArray>.getByBoolean(row: Boolean, col: Boolean): Int {
    // 把布尔值映射为数组索引:true→0,false→1(你也可以根据需求调整映射规则)
    val rowIndex = if (row) 0 else 1
    val colIndex = if (col) 0 else 1
    return this[rowIndex][colIndex]
}

// 扩展函数:用布尔值设置对应位置的元素
fun Array<IntArray>.setByBoolean(row: Boolean, col: Boolean, value: Int) {
    val rowIndex = if (row) 0 else 1
    val colIndex = if (col) 0 else 1
    this[rowIndex][colIndex] = value
}

// 使用示例
val value = intArray.getByBoolean(true, false) // 75
intArray.setByBoolean(false, false, 99) // 将false行false列的值改为99

优点:保留了数组的高性能,封装后使用体验和布尔索引一致;
缺点:需要额外写映射逻辑,但逻辑非常简单。

方案3:自定义枚举(语义化增强)

如果希望代码的语义更清晰(比如避免布尔值的歧义),可以用枚举来替代布尔值作为索引:

enum class RowFlag { TRUE_ROW, FALSE_ROW }
enum class ColFlag { TRUE_COL, FALSE_COL }

val enumIndexedMap = mapOf(
    RowFlag.TRUE_ROW to mapOf(
        ColFlag.TRUE_COL to 0,
        ColFlag.FALSE_COL to 75
    ),
    RowFlag.FALSE_ROW to mapOf(
        ColFlag.TRUE_COL to 1,
        ColFlag.FALSE_COL to 34
    )
)

// 访问示例
val value = enumIndexedMap[RowFlag.TRUE_ROW]?.get(ColFlag.FALSE_COL) // 75

这个方案适合更复杂的业务场景,不过对于你的2×2布尔索引需求来说,前两个方案会更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:20:28