Lambda 有没有办法使用zipWithNext kotlin压缩列表中的部分值?
在Kotlin语言的官方文档中,有一个函数ZipWithNextt,如下所示Lambda 有没有办法使用zipWithNext kotlin压缩列表中的部分值?,lambda,kotlin,Lambda,Kotlin,在Kotlin语言的官方文档中,有一个函数ZipWithNextt,如下所示 val letters = listOf("a", "b", "c", "d", "e", "f") val pairs = letters.zipWithNext {a, b -> a + b} // [ab, bc, cd, de, ef] 是否有一种方法可以只汇总此列表中的部分元素,而不更改其余元素? 为了进行比较,您可以使用另一个列表(“bc”、“de”)。 在这种情况下,最终输出应该类似于[a,bc,
val letters = listOf("a", "b", "c", "d", "e", "f")
val pairs = letters.zipWithNext {a, b -> a + b} // [ab, bc, cd, de, ef]
是否有一种方法可以只汇总此列表中的部分元素,而不更改其余元素?
为了进行比较,您可以使用另一个列表(“bc”、“de”)
。
在这种情况下,最终输出应该类似于
[a,bc,de,f]
我假设初始列表的大小是偶数,否则无法获得预期结果为了 使用
zipWithNext()
:
将分块(2)
:
两者都给出了这样的结果:
[a, bc, de, f]
编辑至于比较清单:
fun getNewList(list: List<String>, comparison: List<String>) : List<String> {
val newList = mutableListOf<String>()
var flag = false
list.forEachIndexed { i, s ->
if (i < list.size - 1) {
if (!flag) {
val item = s + list[i + 1]
if (comparison.contains(item)) {
newList.add(item)
flag = true
} else {
newList.add(s)
}
} else {
flag = false
}
} else {
newList.add(s)
}
}
return newList
}
将打印:
[a, bc, de, f]
也许兰姆达的某些状况会有所帮助?例如
val pairs=letters.zipWithNext{a,b->if(a.length>1 | | b.length>1){return@zipWithNexta}return@zipWithNexta+b}
谢谢你的回答。请告诉我如何做同样的事情,但将函数zipWithNext的结果与之前公布的listOf(“bc”,“de”)
进行比较,换句话说,只将此列表中的值写入最终列表。其余部分保持不变。有一个初始列表:listOf(“a”、“b”、“c”、“d”、“e”、“f”)
,这是:listOf(“bc”、“de”)
。如果对初始列表应用zipWithNext()
,您将得到:[(a,b)、(b,c)、(c,d)、(d,e)、(e,f)]
。您希望在这个结果中进行什么样的比较?我希望该函数不仅适用于这个示例。如果我们将比较列表简化为listOf(“bc”)
,我如何得到这个结果<代码>[a、bc、d、e、f]请参见我编辑的答案。如果我了解您的需求,这是一个算法解决方案,不涉及zipWithNext()
。
[a, bc, de, f]
fun getNewList(list: List<String>, comparison: List<String>) : List<String> {
val newList = mutableListOf<String>()
var flag = false
list.forEachIndexed { i, s ->
if (i < list.size - 1) {
if (!flag) {
val item = s + list[i + 1]
if (comparison.contains(item)) {
newList.add(item)
flag = true
} else {
newList.add(s)
}
} else {
flag = false
}
} else {
newList.add(s)
}
}
return newList
}
val letters = listOf("a", "b", "c", "d", "e", "f")
val comparison = listOf("bc", "de")
val newList = getNewList(letters, comparison)
println(newList)
[a, bc, de, f]