binarySearchBy
inline fun <T, K : Comparable<K>> List<T>.binarySearchBy( key: K?, fromIndex: Int = 0, toIndex: Int = size, crossinline selector: (T) -> K? ): Int
Ищет в этом списке или его диапазоне элемент, у которого ключ, возвращаемый заданной функцией селектора, равен заданному значению ключа с помощью алгоритма бинарного поиска. Ожидается, что список отсортирован в порядке возрастания в соответствии с естественным порядком сравнения ключей его элементов. В противном случае результат не определен.
Если список содержит несколько элементов со значением ключа, нет гарантии, какой из них будет найден.
null значение считается меньшим, чем любое ненулевое значение.
import kotlin.test.*
fun main(args: Array<String>) {
//sampleStart
data class Box(val value: Int)
val numbers = listOf(1, 3, 7, 10, 12)
val boxes = numbers.map { Box(it) }
println(boxes.binarySearchBy(10) { it.value }) // 3
//sampleEnd
}Возвращает индекс элемента со значением ключа, если он содержится в списке в заданном диапазоне; в противном случае, обратную точку вставки (-insertion point - 1). Точка вставки определяется как индекс, в котором элемент должен быть вставлен, чтобы список (или указанный поддиапазон списка) оставался отсортированным.
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/binary-search-by.html