Kotlin中使用zip()的代码是如何获取列表元素索引的?
参考解法原理说明
你自己的实现逻辑和参考解法核心思路完全一致:都是生成一个和原列表等长的索引序列,再和原列表用zip配对。参考解法只是用Kotlin的内置特性简化了写法:
indices属性是索引的来源
Kotlin中所有List都有一个内置的indices属性,返回值是IntRange类型,代表当前列表所有合法索引的范围,取值就是从0到列表size-1的连续整数,完全等价于你手动循环生成的finalList的内容。
比如listOf('a','b','c').indices的取值就是0..2,遍历时会依次输出0、1、2。zip函数的配对逻辑zip函数会按位置对齐两个集合的元素,逐个组合成Pair:原列表的第n个元素,和indices的第n个值(就是索引n)配对,刚好得到(元素, 索引)的结构。- 扩展函数的写法
fun <T> List<T>.zipWithIndex()是Kotlin的扩展函数语法,相当于给所有List类型新增了一个名为zipWithIndex的成员方法,调用时不需要额外传列表参数,方法内部的this就是调用方法的列表本身,所以可以直接写zip(indices),等价于this.zip(this.indices)。
需要补充学习的知识点
- Kotlin 扩展函数:无需继承即可给现有类添加自定义方法的语法
- Kotlin 泛型基础:代码里的
<T>是泛型声明,让这个函数可以适配任意元素类型的List,返回值的类型也更安全,不会像你的实现那样丢失类型信息变成Any - Kotlin 集合内置属性:比如
List的indices、lastIndex等常用属性 - Kotlin 集合高阶函数:
zip、map这类集合操作函数的用法 - Kotlin 单表达式函数:当函数逻辑只有一行时,可以省略大括号,直接用
=连接函数体的写法
内容的提问来源于stack exchange,提问作者Anton Kononenko
相关产品推荐
相关产品推荐

