Kotlin: как использовать уменьшение / сворачивание со структурой данных в качестве накопительного аргумента? - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу использовать методы уменьшить / сложить, чтобы создать новый список из существующего списка. Вот код, который я пытался написать:

val list: List<Int> = listOf(1, 2, 3)
val newList = mutableListOf<Int>()
    val sum: List<Int> = list.fold(newList) { (acc: List<Int>, i: Int) -> {
        acc.add(i + 10)
        acc
    }}

Он не компилируется.

Я хочу, чтобы newList был (11,12,13). Как я могу сделать это функциональным образом?

В Javascript, например, этот код компилируется:

list.reduce((acc, item) => {
   acc.push(item + 10)
   return acc;
}, [])

1 Ответ

2 голосов
/ 14 февраля 2020

Самый удобный и функциональный способ сделать то, что вы хотите, это использовать функцию map:

val list: List<Int> = listOf(1, 2, 3)
val newList: MutableList<Int> = list.map { it + 10 }.toMutableList()

Но если вы действительно хотите использовать fold по какой-то (странной) причине, вы можете сделать это так:

val newList: MutableList<Int> = 
    list.fold(ArrayList()) { acc, x -> acc.apply { add(x + 10) } }

или вот так:

val newList: MutableList<Int> = 
    list.fold(ArrayList()) { acc, x -> 
        acc += x + 10
        acc
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...