иметь дело с массивами Котлина с длинными переменными - PullRequest
0 голосов
/ 10 октября 2018

У меня вопрос по поводу Котлина.Я попробовал две версии Kotlin, 1.0.0 и 1.2.6.Используя Kotlin, мы можем инициализировать массив и получить доступ к его элементу следующим образом.

val n: Int = 10
val arr = Array(n, { it } )
val i: Int = 0
println(arr[i])

Однако я получил ошибку с этим кодом.

val n: Long = 10
val arr = Array(n, { it } )
val i: Long = 0
println(arr[i])

Кажется, что этоЕдинственный способ привести Long к Int, чтобы скомпилировать этот код.

val n: Long = 10
val arr = Array(n.toInt(), { it } )
val i: Long = 0
println(arr[i.toInt()])

Тем не менее, он кажется мне слишком избыточным, но я не смог найти никаких решений.Так что мой вопрос

  1. Есть ли способ инициализировать массивы и элементы доступа с помощью переменной Long?
  2. Есть ли у Kotlin какие-либо причины, по которым переменная Long здесь не должна приниматься?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Если вы хотите инициализировать массив длин заданной длины, вы можете использовать ту же самую функцию Array верхнего уровня:

val n = 10 // n is Int
val arrayOfLongs = Array(n) { it.toLong() } // Array of 10 longs

Здесь число n равно Int ифункция initializer преобразует целочисленный индекс it инициализируемого элемента в Long, поэтому в результате мы получаем массив значений long.

Или вы можете использовать другую аналогичную функцию для создания специализированной LongArray:

val longArray = LongArray(n) { it.toLong() } // LongArray of 10 longs

Оба массива хранят длинные, но последний делает это более компактно.

0 голосов
/ 10 октября 2018

Kotlin поставляется с longArrayOf(1, 2, 3), который создаст для вас массив, содержащий Long s.

Обратите внимание, что то, что вы пытаетесь сделать с println(arr[i]), получает значение Long изarr, но индексация массивов выполняется с Int s.Он никогда не будет работать с Long s:

/** 
 * Returns the array element at the given [index]. 
 * This method can be called using the index operator.
 */
public operator fun get(index: Int): Long
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...