【发布时间】:2021-10-14 10:03:13
【问题描述】:
我正在解决一本 Kotlin 编程书籍的练习题。任务是使用“zip()”实现函数并返回一个Pairs的“List”,其中“Pair”中的第一项是元素,第二项是该元素的索引。
我完成了练习,解决方案有效,但我无法理解书上的解决方案。
这是我的解决方案:
fun zipWithIndex(listToTake: List<Any>): List<Pair<Any, Any>> {
val finalList = mutableListOf<Any>()
var num = 0
for(element in listToTake) {
finalList += num
num ++
}
return (listToTake zip finalList)
}
fun main() {
val listToCall = listOf<String>("a", "b", "c")
println(zipWithIndex(listToCall))
}
这是本书的解决方案:
fun <T> List<T>.zipWithIndex(): List<Pair<T, Int>> =
zip(indices)
fun main() {
val list = listOf('a', 'b', 'c')
list.zipWithIndex() eq
"[(a, 0), (b, 1), (c, 2)]"
}
有人可以解释一下本书的解决方案如何获取列表中元素的索引,或者告诉我我需要阅读的主题以弄清楚书中的代码是如何工作的。
提前感谢您的帮助。
【问题讨论】:
-
检查the docs for
indices- 它返回一个包含集合索引的范围,所以如果你用它自己的索引列表压缩一个列表(然后这个范围被解释为它所有值的列表) , 你得到了完全想要的结果。 -
@CherryDT 谢谢!你帮了我很多)
-
Atomic Kotlin → 函数式编程 → 操作列表 → Exercise 1 :-)
-
一个 IDE(例如 IntelliJ IDEA)对于研究这类事情非常有用:它可以向您显示每个对象、方法、属性等的文档和源代码。
标签: kotlin