Kotlin lambda中如何获取zip合并集合的配对元素值
Kotlin 访问zip合并后配对元素的正确方式
首先明确核心前提:两个集合调用zip()方法后,返回的是元素类型为Pair<T, R>(二元组)的列表,每个Pair仅包含两个位置的元素,不存在自定义属性、也不存在第三个索引位。
你之前的两种写法错误原因如下:
- 第一种写法错误:
Pair类型没有定义名为i、j的属性,同时lambda参数声明格式不符合Kotlin语法,无法直接给隐式参数it强行声明两个属性 - 第二种写法错误:二元组仅支持索引0、1访问两个内部元素,
it[2]是访问不存在的第三个元素,会直接触发越界错误;另外你这里把第二个集合写成了guess,需要和你实际要比对的集合变量名保持一致
正确实现方式
有两种符合Kotlin语法的写法,都可以实现统计相等配对数量的需求:
- 通过隐式参数
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 } - 通过解构声明拆分二元组
可以在lambda参数位置直接把Pair解构为两个独立变量,代码语义更直观:val num = A.zip(B).count { (aElement, bElement) -> aElement == bElement }
你看到的官方示例里numbers.count { it % 2 == 0 }的逻辑完全可以复用:这里的it就是列表中的单个元素,只是zip返回的列表里,单个元素本身是装了两个值的Pair,不是基础数字/字符类型而已。
内容的提问来源于stack exchange,提问作者Laughing_Man
相关产品推荐
相关产品推荐

