我正在学习Kotlin。我正在学习基础知识。让我们考虑截图中的代码:
我真的很难阅读它所显示的信息并理解它。
1:我知道这与数组元素之间需要有一个总顺序有关,这样使用二进制搜索才有意义。
2:我还知道如果我使用IntArray,我不需要指定比较器,因为Integer有其定义的总顺序。
但是有人能解释一下什么是〈**out TypeVariable(T)〉**以及如何用连贯的句子阅读下面的内容吗?
fun数组.binarySearch(元素:T, Comparator :Kotlin.比较器/ = java.util.比较器 /,来自索引:整数=...,到索引:整数=...):在Kotlin.集合中定义的整数
你还能给予我一个对象数组的例子和一部分代码来定义它们的总顺序吗(不是通常的:〉或按字母顺序排列...)
1条答案
按热度按时间qvtsj1bj1#
<out TypeVariable(T)>
与一些高级概念有关,比如泛型和其他相关的东西,因为你还在学习kotlin fundementals,所以你现在不能理解这条消息是很正常的。一般来说,此消息背后的原因是您没有指定要搜索的元素,应该有一个名为
element
的参数,其类型为T
,T
在这里表示泛型类型,它接受任何类,无论是Int、String还是任何类型,但由于您的Array由Integer组成,因此必须将Int类型放入参数中,否则将抛出异常。对于
Comperator
,可以将其设置为compareBy { it }
来比较整数,当然,使用IntArray
更适合您的情况,效率更高,也更简单。仅对非基元类型使用Array
类型。当您有一个对象列表并且希望基于这些对象的属性进行比较时,指定Comperator的原因非常明显。但是对于Int类型,使用IntArray,一切都会很好。文件:
https://kotlinlang.org/docs/generics.html#type-projections
stackoverflow中的另一个问题是:
What is out keyword in kotlin
compareBy { it }
的平均值是多少?**此函数用于指定您要用来比较数组元素的属性,由于您的Array是Int类型,这里
it
是Int类型,表示按整数值比较数组元素。为了让它更清楚,让我们创建一个简单的类
Book
:假设你有一个根据页码排序的图书数组,你想做一个二进制搜索,这里我们使用
compareBy
告诉编译器使用页码来比较图书,这样它就可以正确地执行比较:看看
compareBy { it.pages }
,it
的类型是Book,我们指定.pages
根据页面比较书籍。