【问题标题】:How can I create a map with every two items in a list in Kotlin?如何在 Kotlin 的列表中创建包含每两个项目的地图?
【发布时间】:2018-04-28 13:06:20
【问题描述】:

我正在尝试创建一个从列表中获取两个值并使用第一个值作为键和第二个键作为值的映射,但我不知道该怎么做。

假设我有一个如下列表。

-enormal-tflat-stest

如何从该列表中创建如下所示的地图?

-enormal-tflat-stest

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    如果您想使用内置函数,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}
    

    【讨论】:

      【解决方案2】:

      使用stdlibzipWithNext() 是实现目标的最直接方式:

      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/…
      • 是的,你显然是对的......抱歉误导性答案
      猜你喜欢
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多