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

Kotlin lambda中如何获取zip合并集合的配对元素值

Kotlin 访问zip合并后配对元素的正确方式

首先明确核心前提:两个集合调用zip()方法后,返回的是元素类型为Pair<T, R>(二元组)的列表,每个Pair仅包含两个位置的元素,不存在自定义属性、也不存在第三个索引位。

你之前的两种写法错误原因如下:

  • 第一种写法错误:Pair类型没有定义名为i、j的属性,同时lambda参数声明格式不符合Kotlin语法,无法直接给隐式参数it强行声明两个属性
  • 第二种写法错误:二元组仅支持索引0、1访问两个内部元素,it[2]是访问不存在的第三个元素,会直接触发越界错误;另外你这里把第二个集合写成了guess,需要和你实际要比对的集合变量名保持一致

正确实现方式

有两种符合Kotlin语法的写法,都可以实现统计相等配对数量的需求:

  1. 通过隐式参数it访问Pair的内置属性
    Pair类型自带两个公开属性first(第一个元素,来自集合A)和second(第二个元素,来自被zip的集合),直接比对即可:
    // 比对A和B的相等配对
    val num = A.zip(B).count { it.first == it.second }
    
    // 如果要比对A和guess,替换zip的参数即可
    // val num = A.zip(guess).count { it.first == it.second }
    
  2. 通过解构声明拆分二元组
    可以在lambda参数位置直接把Pair解构为两个独立变量,代码语义更直观:
    val num = A.zip(B).count { (aElement, bElement) -> aElement == bElement }
    

你看到的官方示例里numbers.count { it % 2 == 0 }的逻辑完全可以复用:这里的it就是列表中的单个元素,只是zip返回的列表里,单个元素本身是装了两个值的Pair,不是基础数字/字符类型而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:15:45