Kotlin/Java标准库是否有按位合并二维数组的内置union函数?
关于Kotlin/Java二维数组按位置合并的内置函数问题
Kotlin和Java的标准库都没有提供你描述的这种“按对应位置合并二维数组”的内置函数。
需要注意的是,标准库里集合类的union方法是用来求集合的并集(去重合并元素),和你需求里的“逐位置自定义合并”完全不是一回事。你要的这类操作属于元素级别的逐元素映射合并,标准库没有专门为二维数组提供这类API。
如果你需要实现这个功能,在Kotlin里可以通过扩展函数快速实现,贴合你想要的调用风格:
// 扩展函数:对两个二维数组进行逐位置合并,支持自定义合并逻辑 fun <T, R> Array<Array<T>>.elementwiseMerge(other: Array<Array<T>>, transform: (T, T) -> R): Array<Array<R>> { // 先校验两个数组的维度是否一致 require(this.size == other.size) { "两个数组的行数必须相同" } return this.mapIndexed { rowIndex, row -> require(row.size == other[rowIndex].size) { "第$rowIndex行的列数必须相同" } // 对每一行的元素逐对应用合并逻辑 row.zip(other[rowIndex], transform).toTypedArray() }.toTypedArray() }
使用示例:
val a = arrayOf( arrayOf(1, 0), arrayOf(0, 0) ) val b = arrayOf( arrayOf(1, 0), arrayOf(0, 1) ) // 调用扩展函数,传入加法合并逻辑 val result = a.elementwiseMerge(b) { da, db -> da + db } val shouldBe = arrayOf( arrayOf(2, 0), arrayOf(0, 1) ) // 数组内容比较要用contentDeepEquals,不能直接用==(==比较的是引用) assert(result.contentDeepEquals(shouldBe))
Java里同样没有对应的内置方法,需要手动遍历二维数组的每一个元素,或者结合Stream API实现类似逻辑,但代码会相对繁琐。
内容的提问来源于stack exchange,提问作者Thomas Cook
相关产品推荐
相关产品推荐

