Gibt es eine einfache Möglichkeit, Liste in Teile (vielleicht einige Lambda) in Kotlin zu teilen?Liste in Teile aufteilen
Zum Beispiel:
[1, 2, 3, 4, 5, 6] => [[1, 2], [3, 4], [5, 6]]
Gibt es eine einfache Möglichkeit, Liste in Teile (vielleicht einige Lambda) in Kotlin zu teilen?Liste in Teile aufteilen
Zum Beispiel:
[1, 2, 3, 4, 5, 6] => [[1, 2], [3, 4], [5, 6]]
die Liste Gegeben: val list = listOf(1, 2, 3, 4, 5, 6)
können Sie verwenden groupBy
:
list.groupBy { (it + 1)/2 }.map { it.value }
Oder wenn Ihre Werte sind nicht Zahlen Sie können ihnen zuerst einen Index zuweisen:
list.withIndex()
.groupBy { it.index/2 }
.map { it.value.map { it.value } }
Oder wenn Sie möchten, dass einige Zuführungen sparen Sie ein bisschen mehr manuelle Art und Weise mit foldIndexed gehen kann:
list.foldIndexed(ArrayList<ArrayList<Int>>(list.size/2)) { index, acc, item ->
if (index % 2 == 0) {
acc.add(ArrayList(2))
}
acc.last().add(item)
acc
}
Für ['groupBy'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html)," die Die zurückgegebene Map behält die Reihenfolge der Iterationen der Schlüssel bei, die aus der ursprünglichen Sammlung erstellt wurden. " Als solches kann Ihr erstes Beispiel zu 'list.groupBy {(it + 1)/2} .values' vereinfacht werden. – mfulton26
Kotlin hat ['withIndex'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/with-index.html), was Ihr zweites Beispiel etwas lesbarer machen kann:' list .withIndex(). groupBy {it.index/2} .values.map {it.map {it.value}} '. – mfulton26
@ mfulton26 danke für die Nachricht, aktualisiert die Antwort entsprechend. – miensol
Die API sagt, es ist eine GroupBy-Funktion, die tun sollten, was Sie wollen.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html
Oder sublist verwenden und es brechen sich
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/sub-list.html
Seit Kotlin 1.2 Sie Iterable<T>.chunked(size: Int): List<List<T>>
Funktion von stdlib verwenden können (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/chunked.html).
das ist eine Funktion, die für Kotlin 1.1 angefordert wird: https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/window-sliding.md – succcubbus
Mögliche Duplikate: http://stackoverflow.com/q/ 34498368/3255152 – mfulton26
Wenn Sie in zwei Teile partitionieren möchten, würde https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/partition.html tun, was Sie tun möchten. z.B. 'list.partition {x -> x <4}' – carpeliam