从文件中读取以字符串形式存储的地图对象

时间:2019-12-09 20:59:26

标签: java scala scala-collections

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

public void Update()
{
    if ( ( currentHealth < maxHealth ) && !healing )
    {
        healing = true;
        StartCoroutine(SlowHeal());
   }
}

IEnumerator SlowHeal()
{
    while (currentHealth < maxHealth) 
    {
        yield return new WaitForSeconds(healingFreq);

        currentHealth += healingAmount;
        if (currentHealth > maxHealth)
        {
            currentHealth = maxHealth;
        }

        SetHealthBar(currentHealth);
    }

    healing = false;
}

因此,当我阅读它时,它以字符串形式读取。

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

1 个答案:

答案 0 :(得分:0)

正如其他人所评论的那样,将Map数据存储为String效率低下。无论如何,假设Map元素类型是预先已知的(在这种情况下为Map[String, List[Int]]),则可以使用Regex模式将所有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))