鉴于参数size
中的最大列表大小和参数elements
中的元素总数,我需要创建一个列表列表。在Kotlin的for
循环中创建变量的语法是什么?
我考虑的解决方法是在将元素添加到列表之前声明并创建列表。然后,当列表达到最大容量时,将其切换为空的下一个列表。
这是半生不熟的代码:
fun listOfLists(size: Int, vararg elements: String): List<List<String>> {
var amountOfElements = elements.size
var currentSubList: List<String> = mutableListOf<String>()
val numberOfLists: Int = amountOfElements / size + 1
for (n in 0..numberOfLists) {
// Code for creating the total number of lists needed
}
for (e in elements) {
if (amountOfElements % size == 0) {
// Code for switching lists
}
amountOfElements--
}
答案 0 :(得分:1)
正如@dyukha正确提到的那样,您需要的是chunked()函数。
fun listOfLists(size: Int, vararg elements: String) =
elements.asList().chunked(size)
或者,如果您想真正提高效率,也可以使用asSequence()
:
fun listOfLists(size: Int, vararg elements: String) =
elements.asSequence().chunked(size)
chunked()
在Array
上不起作用,因为它们是在Iterable
和Sequence
上定义的,而Array
没有实现它们中的任何一个。 / p>