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

Kotlin中如何简便计算数组/列表内元素两两相乘结果

实现方案

要拿到集合内不重复两两组合的乘积,根本不需要复杂操作,核心思路就是遍历所有下标满足i < j的元素对,直接计算乘积即可,天然就能得到你要的1*2、1*3、2*3这类结果,不会出现重复配对、自己乘自己的问题。

适配数组和List<Int>的简便实现

不管你手里的是整数数组,还是List<Int>类型的列表,都可以直接套下面的逻辑,以Kotlin为例(其他语言逻辑完全通用):

// 支持List<Int>
fun List<Int>.getPairProducts(): List<Int> {
    val res = mutableListOf<Int>()
    for (i in 0 until lastIndex) {
        for (j in i+1..lastIndex) {
            res.add(this[i] * this[j])
        }
    }
    return res
}

// 适配Int数组
fun IntArray.getPairProducts(): List<Int> = this.toList().getPairProducts()

调用非常简单:

fun main() {
    val numList = listOf(1,2,3)
    println(numList.getPairProducts()) // 输出 [2, 3, 6]

    val numArr = intArrayOf(1,2,3)
    println(numArr.getPairProducts()) // 输出 [2, 3, 6]
}

更精简的函数式写法

如果不想写显式双层循环,用集合的函数式API一行就能搞定:

fun List<Int>.getPairProductsShort() = flatMapIndexed { i, a -> drop(i+1).map { b -> a*b } }

别用“先算所有两两乘积再去重”的笨方法,下标错位遍历的方式只需要遍历n*(n-1)/2次,是这类组合问题效率最高的遍历方式,集合元素量大的时候差距会非常明显。

如果是用Java、C#等其他语言,只要照搬「外层遍历每个下标,内层从当前下标下一位开始遍历配对」的逻辑就行,不需要额外引入第三方工具包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21