Kotlin 将列表映射到以下元素的元组

Kotlin 将列表映射到以下元素的元组,kotlin,Kotlin,我已经给出了一个整数列表。在进一步的工作中,我需要始终映射以下两个元素。如果输入列表包含无效的元素计数,则应删除最后一个元素。以下是一个例子: [1, 2, 3, 4, 5, 6, 7] //Input [(1, 2), (3, 4), (5, 6)] //Output 我写函数来获得想要的输出,但我认为它们都是低效的 首先,我尝试了一种功能性的方法。但是它需要两个过滤器调用和一个zip调用来生成列表。因此它在entier列表上迭代2.5次 为此,我尝试了两种迭代方法。它只在列表上迭代一次,可

我已经给出了一个整数列表。在进一步的工作中,我需要始终映射以下两个元素。如果输入列表包含无效的元素计数,则应删除最后一个元素。以下是一个例子:

[1, 2, 3, 4, 5, 6, 7] //Input
[(1, 2), (3, 4), (5, 6)] //Output
我写函数来获得想要的输出,但我认为它们都是低效的

首先,我尝试了一种功能性的方法。但是它需要两个过滤器调用和一个zip调用来生成列表。因此它在entier列表上迭代2.5次

为此,我尝试了两种迭代方法。它只在列表上迭代一次,可能是最快的版本。但它使用多个可变变量/列表。此外,它也不像函数方法那么容易理解。(它破坏了代码其余部分的干净性)

fun main(args:Array){
mapFunctional()
映射的()
}
fun mapFunctional(){
val list:list=listOf(1,2,3,4,5,6,7)
val输出:List=List.filterIndexed{index,->
索引%2==0
}.zip(list.filterIndexed{
索引,->索引%2==1
})
println(输出)
}
有趣的{
val list:list=listOf(1,2,3,4,5,6,7)
val输出:MutableList=mutableListOf()
var指数=0
而(索引

它们是在函数方法中实现这一点的好(有效)方法,还是仅在经典循环中才可能实现?

您可以使用标准库函数实现此目的:

val list = listOf(1, 2, 3, 4, 5, 6, 7)
val output = list.chunked(2).dropLastWhile { it.size < 2 } 
val list=listOf(1,2,3,4,5,6,7)
val output=list.chunked(2).dropLastWhile{it.size<2}
由于
chunked
保留了最后一个部分列表,其中包含的项目少于所需的大小,因此您需要处理该部分列表,并使用有条件地将其删除。如果您需要
列表
,则可以使用标准库调用来调用该部分列表


带窗口的
函数将返回
列表
,因此您必须将内部
列表
映射到
。默认情况下,带窗口的
功能将删除部分窗口

对不起,标题不好。我不知道如何正确调用这个过程。
val list = listOf(1, 2, 3, 4, 5, 6, 7)
val output = list.chunked(2).dropLastWhile { it.size < 2 } 
val myList = listOf(1, 2, 3, 4, 5, 6, 7)
val listOfPairs = myList.windowed(2, 2).map { Pair(it[0], it[1]) }
// [(1, 2), (3, 4), (5, 6)]