
kotlin 和 java 标准库均未提供内置的二维数组“并集”(即按位置逐元素运算)方法;但可通过扩展函数灵活实现加法、乘法等自定义合并逻辑,并确保结果维度与调用方一致。
kotlin 和 java 标准库均未提供内置的二维数组“并集”(即按位置逐元素运算)方法;但可通过扩展函数灵活实现加法、乘法等自定义合并逻辑,并确保结果维度与调用方一致。
在数值计算或矩阵处理场景中,常需对两个形状相同的二维数组(如 Array
幸运的是,Kotlin 的扩展函数机制让此类通用操作简洁易写。以下是一个类型安全、可复用的扩展方案:
fun Array<array>>.matrixOp(
other: Array<array>>,
op: (Int, Int) -> Int
): Array<array>> {
require(this.size == other.size) { "Row count mismatch: ${this.size} != ${other.size}" }
return mapIndexed { i, row ->
require(row.size == other[i].size) { "Column count mismatch at row $i: ${row.size} != ${other[i].size}" }
row.mapIndexed { j, value -> op(value, other[i][j]) }.toTypedArray()
}.toTypedArray()
}</array></array></array>
该函数支持任意二元整数运算,使用示例如下:
val a = arrayOf(
arrayOf(1, 0),
arrayOf(0, 0)
)
val b = arrayOf(
arrayOf(1, 0),
arrayOf(0, 1)
)
val sum = a.matrixOp(b) { x, y -> x + y } // [[2, 0], [0, 1]]
val max = a.matrixOp(b) { x, y -> maxOf(x, y) } // [[1, 0], [0, 1]]
val and = a.matrixOp(b) { x, y -> x and y } // [[1, 0], [0, 0]]
✅ 关键特性说明:
- 维度校验:运行时检查行列数是否严格匹配,避免 IndexOutOfBoundsException;
- 不可变性:不修改原数组,返回全新结构;
- 泛型友好:稍作改造即可支持 Double、Float 或自定义数值类型(需重载);
- 性能合理:单次遍历,时间复杂度 O(m×n),无冗余拷贝。
⚠️ 注意事项:
- 此方案假设输入为规则矩形数组(每行长度一致),若存在不规则嵌套(如 arrayOf(arrayOf(1), arrayOf(2, 3))),需额外预处理或增强校验逻辑;
- 如需更高性能或丰富线性代数功能(如转置、乘法、稀疏矩阵),推荐引入专业库,例如 JetBrains 开源的 Viktor(专为 Kotlin 科学计算设计)或 Apache Commons Math;
- Java 用户可将逻辑封装为静态工具方法,但无法享受 Kotlin 扩展函数的链式调用与作用域优势。
综上,虽然标准库未提供“二维数组 union”,但通过几行清晰的 Kotlin 扩展,即可获得类型安全、可读性强、易于测试的定制化合并能力——这正是 Kotlin “约定优于配置”哲学的典型体现。











