【发布时间】:2018-04-28 13:06:20
【问题描述】:
我正在尝试创建一个从列表中获取两个值并使用第一个值作为键和第二个键作为值的映射,但我不知道该怎么做。
假设我有一个如下列表。
-e、normal、-t、flat、-s、test
如何从该列表中创建如下所示的地图?
-e 到 normal、-t 到 flat、-s 到 test
【问题讨论】:
标签: kotlin
我正在尝试创建一个从列表中获取两个值并使用第一个值作为键和第二个键作为值的映射,但我不知道该怎么做。
假设我有一个如下列表。
-e、normal、-t、flat、-s、test
如何从该列表中创建如下所示的地图?
-e 到 normal、-t 到 flat、-s 到 test
【问题讨论】:
标签: kotlin
如果您想使用内置函数,chunked 可以是一个快速的方法:
val arguments = listOf("-e", "normal", "-t", "flat", "-s", "test")
val map: Map<String, String> = arguments
.chunked(2) { (switch, value) -> switch to value }
.toMap()
println(map) // {-e=normal, -t=flat, -s=test}
【讨论】:
使用stdlib,zipWithNext() 是实现目标的最直接方式:
val arguments = listOf("-e", "normal", "-t", "flat", "-s", "test")
val map = arguments.zipWithNext().toMap()
它从 Kotlin 1.2 开始可用。
【讨论】:
{-e=normal, normal=-t, -t=flat, flat=-s, -s=test}。 zipWithNext 适用于每两个元素,因此它将先压缩,然后压缩,然后压缩第二和第三,然后压缩第三和第四,...kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/…