Scala如何在元组数组中快速查找指定key是否存在
现有数组直接检索方案
如果你不希望修改当前的元组数组结构,直接使用Scala集合内置的exists方法即可,不需要手动遍历,运行效率和手动遍历完全一致,时间复杂度为O(n)。exists方法仅需要传入判断逻辑,不需要传入完整键值对,示例代码如下:
// 你要检索的目标key val targetKey: Int = 待检索的key值 // 返回Boolean类型的存在结果 val isExists: Boolean = tuple_array.exists(_._1 == targetKey)
你只需要对结果做简单转换即可得到1/0格式的返回值:
val res: Int = if (isExists) 1 else 0
高频检索场景性能优化方案
如果你的检索操作执行频率非常高,建议将元组数组一次性转换为Map结构,Map的key查找时间复杂度为O(1),在数组元素量大的场景下性能远高于遍历数组。
转换和查询示例代码如下:
// 仅需执行一次转换 val kvMap = tuple_array.toMap // 后续多次查询直接调用contains方法 val isExists: Boolean = kvMap.contains(targetKey)
- 注意:如果数组中存在同一个key对应多个value的情况,
toMap会默认保留该key最后一次出现的键值对。如果需要保留所有同key的键值对,可以使用groupBy转换:val keyGroupMap = tuple_array.groupBy(_._1) val isExists: Boolean = keyGroupMap.contains(targetKey)
该方案的额外开销只有一次性的数组转Map操作,适合读多写少的场景,如果是单次检索的场景,直接使用第一种exists方案即可,无需额外转换成本。
内容的提问来源于stack exchange,提问作者John Ron
相关产品推荐
相关产品推荐

