Kotlin检查消息

wa7juj8i  于 2023-03-03  发布在  Kotlin
关注(0)|答案(1)|浏览(127)

我正在学习Kotlin。我正在学习基础知识。让我们考虑截图中的代码:

我真的很难阅读它所显示的信息并理解它。
1:我知道这与数组元素之间需要有一个总顺序有关,这样使用二进制搜索才有意义。
2:我还知道如果我使用IntArray,我不需要指定比较器,因为Integer有其定义的总顺序。
但是有人能解释一下什么是〈**out TypeVariable(T)〉**以及如何用连贯的句子阅读下面的内容吗?

fun数组.binarySearch(元素:T, Comparator :Kotlin.比较器/ = java.util.比较器 /,来自索引:整数=...,到索引:整数=...):在Kotlin.集合中定义的整数

你还能给予我一个对象数组的例子和一部分代码来定义它们的总顺序吗(不是通常的:〉或按字母顺序排列...)

qvtsj1bj

qvtsj1bj1#

<out TypeVariable(T)>与一些高级概念有关,比如泛型和其他相关的东西,因为你还在学习kotlin fundementals,所以你现在不能理解这条消息是很正常的。
一般来说,此消息背后的原因是您没有指定要搜索的元素,应该有一个名为element的参数,其类型为TT在这里表示泛型类型,它接受任何类,无论是Int、String还是任何类型,但由于您的Array由Integer组成,因此必须将Int类型放入参数中,否则将抛出异常。
对于Comperator,可以将其设置为compareBy { it }来比较整数,当然,使用IntArray更适合您的情况,效率更高,也更简单。仅对非基元类型使用Array类型。当您有一个对象列表并且希望基于这些对象的属性进行比较时,指定Comperator的原因非常明显。但是对于Int类型,使用IntArray,一切都会很好。

    • 什么是"out"关键字?**

文件:
https://kotlinlang.org/docs/generics.html#type-projections
stackoverflow中的另一个问题是:
What is out keyword in kotlin

    • 上面compareBy { it }的平均值是多少?**

此函数用于指定您要用来比较数组元素的属性,由于您的Array是Int类型,这里it是Int类型,表示按整数值比较数组元素。
为了让它更清楚,让我们创建一个简单的类Book

class Book(
    val title: String,
    val pages: Int
)

假设你有一个根据页码排序的图书数组,你想做一个二进制搜索,这里我们使用compareBy告诉编译器使用页码来比较图书,这样它就可以正确地执行比较:

val book1 = Book("Learn Kotlin", 100)
    val book2 = Book("Learn Java", 200)
    val books = arrayOf(book1, book2)
val index = books.binarySearch(element = book2, comparator =  compareBy { it.pages }, fromIndex =  0, toIndex = books.size)

println(index) //prints 1

看看compareBy { it.pages }it的类型是Book,我们指定.pages根据页面比较书籍。

相关问题