Как получить индекс значения из массива Kotlin?indexOf в массивах Kotlin
Мой лучшее решение прямо сейчас с помощью:
val max = nums.max()
val maxIdx = nums.indices.find({ (i) -> nums[i] == max }) ?: -1
есть лучший способ?
Как получить индекс значения из массива Kotlin?indexOf в массивах Kotlin
Мой лучшее решение прямо сейчас с помощью:
val max = nums.max()
val maxIdx = nums.indices.find({ (i) -> nums[i] == max }) ?: -1
есть лучший способ?
Если вы хотите, чтобы получить индекс максимального элемента вы можете использовать функцию «maxBy»:
val maxIdx = nums.indices.maxBy { nums[it] } ?: -1
Это более эффективно, так как он будет проходить массив только один раз.
Это устарело, теперь доступны функции stdlib: http://stackoverflow.com/a/34518333/3679676 –
@Jayson, ваш ответ с помощью новой функции 'indexOf()' никак не отменяет этот ответ, поскольку он по-прежнему превосходит один ход. – Vadzim
Этот ответ работает, но это не имеет смысла делать с учетом стандартных функций lib 'indexOf',' indexOfFirst' и 'indexOfLast'. Это работа для недостающей вещи, которая теперь не пропала. Поэтому устаревшие. –
С текущей Котлин (1.0) можно использовать indexOf()
extension function на массивы:
val x = arrayOf("happy","dancer","jumper").indexOf("dancer")
Все extension functions for arrays найдены в api reference.
В вашем примере:
val maxIdx = nums.indexOf(nums.max())
Есть ли индексOfBy {it.name == "this"}? – Caipivara
@ danielgomezrico Существует не 'indexOfBy', но есть [' indexOfFirst'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index-of-first.html) и ['indexOfLast'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index-of-last.html). – mfulton26
'IndexOf()' для массивов нет в стандартной библиотеке еще. Я помещаю это в наш поисковый трекер http://youtrack.jetbrains.com/issue/KT-4347. Спасибо за отчет –
'indexOf()' теперь присутствует в stdlib. Я добавил ответ, соответствующий этому. –