algorithm - 从 Map 的 List 表示到 Scala 中的真实 Map

标签 algorithm scala functional-programming

我想将键/值的 Seq 转换为 Map。序列的第一个元素被保留,所以对列表从位置 1 开始

问题是:有没有可能用更函数式的方式来实现这个功能?

def list2Map(plainMap:Seq[String]) = {
  var map = Map[String, String]()
  var idx = 1;
  while(plainMap.size > idx) {
    val key = plainMap(idx)
    idx += 1
    val value = plainMap(idx)
    idx += 1

    map = map + (key -> value)
  }

  map
}

assert( list2Map( Seq("reserved slot","key0","value0","key1","value1","key2","value2") ) == Map( ("key0"->"value0"),("key1"->"value1"),("key2"->"value2") ) )

我是 Scala 的新手,我知道有很多不同的方法可以迭代集合,但我没有找到 forEach 方法来每次迭代读取两个元素,从元素 1 开始。

PS:谢谢大家。我从每个人的回应中学到了很多东西!!

最佳答案

list.drop(1).grouped(2).map { x => x.head -> x.last }.toMap

关于algorithm - 从 Map 的 List 表示到 Scala 中的真实 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932216/

相关文章:

database - 如何找到数据库中最长的关系链?

class - Scala——共同特质的二代传承

scala - akka-http API 中返回 JSON 错误

haskell - 编写一个高阶函数来捕获常见模式haskell

algorithm - 加权无向树获得的最大利润

java - [JAVA] A-Star 代码未找到最佳路径

algorithm - 线程二叉树结构在 Haskell 中有什么优势吗?

scala - YARN 因超出内存限制而杀死容器

algorithm - Scala 代码 - 不可变集问题

javascript - 按日期对记录进行排序,然后使用 lodash 对计数进行着色和聚合