Kotlin инициализирует массив, используя другой массив - PullRequest
1 голос
/ 01 апреля 2019

Я могу инициализировать массив в Kotlin следующим образом:

val mArr = Array<Int>(5) {0}

и у меня будет следующий массив [0,0,0,0,0]

Дело в том, что мне нужно инициализировать массив и поместить в него значения другого массива. то есть:

initialArray = [1, 4, 5 ,-2, 7] val offset = 5

И должен получить mArr = [6, 9, 10, 3, 12]

Есть ли способ установить значение каждого mArr[i] на основе каждого initialArray[i]?

что-то вроде

val mArr = Array<Int>(initialArray.size) { offset + initialArray[index]}

Без упаковки в for loop

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Для массива есть функция map.

Итак:

val initialArray = arrayOf(1, 4, 5 ,-2, 7)
val offset = 5
val newArray = initialArray.map { it + offset }.toTypedArray()

Но таким образом вы создаете новый массив без изменения старого.Если вы хотите изменить старый массив, вы можете использовать forEachIndexed метод расширения:

initialArray.forEachIndexed { index, value ->
    initialArray[index] = initialArray[index] + offset

    // or:
    initialArray[index] = value + offset
}
0 голосов
/ 01 апреля 2019
val mArr = Array<Int>(initialArray.size) { offset + initialArray[index] }

уже почти работает.Просто index здесь не определено.Вы хотите, чтобы это был параметр функции, поэтому { index -> offset + initialArray[index] } или короче { offset + initialArray[it] }.Кроме того, для этого вы, вероятно, захотите IntArray вместо Array<Int> (а также initialArray).Объединяя эти изменения:

val mArr = IntArray(initialArray.size) { offset + initialArray[it] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...