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

遍历对象数组时如何判定当前元素为同条件下的最优匹配对象

Kotlin 遍历对象数组时筛选同姓名最大年龄对象的实现方案

最优实现思路为:先预计算每个姓名对应的重名状态和最大年龄,再遍历数组实时判断,时间复杂度为O(n),性能表现最好,实现代码如下:

首先是示例使用的基础定义:

data class Person(val name: String, val age: Int)

// 示例数组
val pers1 = Person("Jake", 22)
val pers2 = Person("Oliver", 25)
val pers3 = Person("Mark", 35)
val pers4 = Person("John", 35)
val pers5 = Person("Mark", 55)
val persons = arrayOf(pers1, pers2, pers1, pers3, pers4, pers5)

核心实现代码:

// 预计算每个姓名的元信息:是否重名、对应最大年龄
val nameMetadata = persons.groupBy { it.name }
    .mapValues { (_, sameNameList) ->
        Pair(
            first = sameNameList.size > 1, // 判断当前姓名是否存在重名
            second = sameNameList.maxOf { it.age } // 取当前姓名对应的最大年龄
        )
    }

// 遍历数组实时判定
for (person in persons) {
    val (isDuplicated, maxAge) = nameMetadata.getValue(person.name)
    // 满足双条件:存在重名 + 是当前姓名下年龄最大的对象
    if (isDuplicated && person.age == maxAge) {
        // 此处执行你的后续操作
        println("待处理对象:$person")
    }
}

如果不需要预计算,想要在单次遍历中实时查询(仅适合极小数据量场景,时间复杂度为O(n²),数据量大时性能损耗严重),可以用如下实现:

for (person in persons) {
    val sameNamePersons = persons.filter { it.name == person.name }
    val isDuplicated = sameNamePersons.size > 1
    val isOldest = sameNamePersons.all { it.age <= person.age }
    if (isDuplicated && isOldest) {
        // 执行后续操作
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:01