Scala 嵌套映射 - 如何处理?

标签 scala csv nested maps

这是我的嵌套 map 示例,其中数据为文字。该程序按预期工作。

    var x = scala.collection.mutable.Map(
        ("Early", Map(("a", 1),  ("b", 2))), 
        ("Late",  Map(("x", 24), ("y", 25))))

for (ticker <- x.keys) {
    val trades = x(ticker)
    for (tradetime <- trades.keys) {
        val tradetotal = trades(tradetime)
        println(ticker + " | " + tradetime + " | " + tradetotal)
    }
    println(ticker + " | " + trades)
}

但是,我想消除文字并从 csv 文件中读取上述值。这是 csv:

Early,a,1 
Early,b,2
Late,x,24
Late,y,25

这是读取 csv 并以类似于上述程序的方式打印出值的代码。

  val bufferedSource = io.Source.fromFile("mapt.csv")
  val builder = StringBuilder.newBuilder

  for (line <- bufferedSource.getLines) {
    val cols = line.split(",").map(_.trim)
    println(s"${cols(0)}|${cols(1)}|${cols(2)}")
    var tmp = cols(0)   // s"${cols(0)}"

    val inner = scala.collection.mutable.Map.empty[String, Int]
    inner(cols(1)) = cols(2).toInt
    println(inner)

    val outer = scala.collection.mutable.Map.empty[String, String]
    outer(cols(0)) = inner
    println(outer)

  }
  bufferedSource.close

我的代码不起作用。我正在努力寻找有关如何处理嵌套 map 的指导。我正在学习斯卡拉。感谢您提供从 csv 文件数据创建嵌套 map 的任何建议。

我收到以下错误:

enter image description here

最佳答案

val lines = scala.io.Source.fromFile("mapt.csv").getLines()
val row = lines.map(_.split(",").map(_.trim))
val outerMap=row.groupBy(_.head)
val result = outerMap.map{case (key,values)=> 
  key-> values.map(v=>(v(1)->v(2))).toMap}  

关于Scala 嵌套映射 - 如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644094/

相关文章:

java - 如何在 Scala 中反转义字符串?

scala - scala 编译器可以在混合时强制实现抽象特征方法吗?

json - 如何使用 jq 将任意简单 JSON 转换为 CSV?

python if elif else 语句

nested - 是否可以将一个 VML roundrect 嵌套在另一个中?

Javascript:在嵌套字典中添加键/值对;键和值是变量

scala - 如何让 sbt 将非 Java 源包含到已发布的工件中?

scala - zipWithIndex 从 1 而不是 0

java - jtable(添加新行)

java - 如何加载大型csv文件,验证每一行并处理数据