将列表分成大小为N的组

时间:2018-11-30 16:58:35

标签: list kotlin functional-programming partition

获取列表并将其分组为大小为n的元组的惯用方式是什么?

例如:用三倍分组为3个

val list = listOf(1,2,3,4)
val partitioned = list.groupsOf(3)

// partitioned[0] = List<Int> 1, 2, 3
// partitioned[1] = List<Int> 4

但最好是这样的

val list = listOf(1,2,3,4)
val newList = mutableListOf()

list.forGroupsOf(3) { triple: Triple<Int?> ->
    newList.add( triple )
}

// partitioned[0] = Triple<Int?> 1, 2, 3
// partitioned[1] = Triple<Int?> 4, null, null 

注意:List.groupsOfList.forGroupsOf是我为这个示例准备的

1 个答案:

答案 0 :(得分:1)

Kotlin提供了一个名为chunked(n)的函数,该函数生成一个列表列表,每个列表包含n个元素:

val list = listOf(1, 2, 3, 4)
val tuples = list.chunked(2).map { Tuple(it[0], it[1]) }

或者:

val list = listOf(1, 2, 3, 4)
val tuples = list.chunked(2) { Tuple(it[0], it[1]) }

请记住,这会生成具有 max n个元素的列表。