2013-12-24 3 views
11

Как получить индекс значения из массива Kotlin?indexOf в массивах Kotlin

Мой лучшее решение прямо сейчас с помощью:

val max = nums.max() 
val maxIdx = nums.indices.find({ (i) -> nums[i] == max }) ?: -1 

есть лучший способ?

+0

'IndexOf()' для массивов нет в стандартной библиотеке еще. Я помещаю это в наш поисковый трекер http://youtrack.jetbrains.com/issue/KT-4347. Спасибо за отчет –

+0

'indexOf()' теперь присутствует в stdlib. Я добавил ответ, соответствующий этому. –

ответ

11

Если вы хотите, чтобы получить индекс максимального элемента вы можете использовать функцию «maxBy»:

val maxIdx = nums.indices.maxBy { nums[it] } ?: -1 

Это более эффективно, так как он будет проходить массив только один раз.

+0

Это устарело, теперь доступны функции stdlib: http://stackoverflow.com/a/34518333/3679676 –

+0

@Jayson, ваш ответ с помощью новой функции 'indexOf()' никак не отменяет этот ответ, поскольку он по-прежнему превосходит один ход. – Vadzim

+0

Этот ответ работает, но это не имеет смысла делать с учетом стандартных функций lib 'indexOf',' indexOfFirst' и 'indexOfLast'. Это работа для недостающей вещи, которая теперь не пропала. Поэтому устаревшие. –

3

С текущей Котлин (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()) 
+0

Есть ли индексOfBy {it.name == "this"}? – Caipivara

+0

@ 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