首页 > 解决方案 > 读取 CSV 到 Map[String,String]

问题描述

我需要(从输入流)读取 2 列 csv 并返回一个 Map。

文件score.txt

player1,21
player2,99
player3,143

非工作代码:

Try(Source.fromInputStream(getClass.getResourceAsStream(s"$RelativePath/$fileName")).getLines().map(_.split(","))) match {
      case Success(scoreMap) => scoreMap
      case Failure(err) => //TODO add throw exception
    }

第一行返回一个Iterator[Array[String]],但我如何返回一个Map[String,String]

PS我在堆栈上尝试了各种“CSV to MAP”解决方案,每一个看起来都是用自己的语言编写的,而且都有我无法理解的错误。

标签: scala

解决方案


假设您从以下行收到的输入

Source.fromInputStream(getClass.getResourceAsStream(s"$RelativePath/$fileName")).getLines().map(_.split(","))

格式如下

val inputArr: Iterator[Array[String]] = Array(
  Array("player1", "21"),
  Array("player2", "99"),
  Array("player3", "143")
).toIterator

要将其转换Iterator[Array[String]]Map[String, String],您可以编写以下函数

val output = inputArr.map{ arr =>
  arr(0) -> arr(1)
}.toMap

它会给你一个输出

output: scala.collection.immutable.Map[String,String] = Map(player1 -> 21, player2 -> 99, player3 -> 143)

如果这回答了您的问题,请告诉我。


推荐阅读