【问题标题】:Read map object stored as string from file从文件中读取存储为字符串的地图对象
【发布时间】:2020-04-03 00:10:45
【问题描述】:

我没有对文件进行任何预处理就保存了我的地图。所以我有一个文件,其中我的地图 object 为:

Map(abcd -> List(1,2,3), efgh -> List(78,46))

所以当我阅读它时,它会被读取为一个字符串。

如何将其转换为地图对象?

【问题讨论】:

  • 你需要做一个非常复杂的解析......或者可能在运行时调用 Scala 解释器,但这也太复杂了。为什么不。不是存储地图的字符串表示,而是将数据存储在更易于解析的表示中,可能是 JSONXML 或者您可以创建自己的格式供您使用案例。

标签: java scala scala-collections


【解决方案1】:

正如其他人所评论的,将地图数据存储为字符串是低效的。无论如何,假设事先知道 Map 元素类型(在本例中为 Map[String, List[Int]]),您可以使用正则表达式模式将所有 string -> List(...) 配对,然后将 List 内容拆分并转换为整数:

import scala.util.{Try, Success, Failure}

val s = "Map(abcd -> List(1,2,3), efgh -> List(78,46))"

val pattern = """(\w+)\s*->\s*List\(([^\)]*)\)""".r

pattern.findAllMatchIn(s).flatMap(_.subgroups).grouped(2).
  collect{ case Seq(k, v) =>
    val ls = v.split("""\s*,\s*""").map(x => Try(x.toInt) match {
      case Success(i) => i
      case Failure(_) => Int.MinValue  // Or any other default integer
    })
    (k, ls.toList)
  }.
  toMap
// res1: Map[String, List[Int]] = Map("abcd" -> List(1, 2, 3), "efgh" -> List(78, 46))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多