我保存地图时未对文件进行任何预处理。所以我有一个文件,其中我的地图 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;
}
因此,当我阅读它时,它以字符串形式读取。
如何将其转换为地图对象?
答案 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))