我有List[List[]]
List(List(1,2), List(3,4))
如果我打电话给toString()
List(List(1,2), List(3,4)).toString()
是否可以恢复原始List[List[]]
,如果是,如何?
感谢。
答案 0 :(得分:2)
您是否只想解析从toString
获得的字符串?如果是这样的话,没有本地方法可以做到这一点(例如Python的eval
或Haskell的read
),但你可以很容易地使用Scala parser combinator library推出自己的方式:
import scala.util.parsing.combinator._
object parseIntListList extends RegexParsers {
def list = "List(" ~> repsep("\\d+".r ^^ (_.toInt), ",") <~ ")"
def apply(s: String) = parse("List(" ~> repsep(list, ",") <~ ")", s)
}
现在parseIntListList(List(List(1, 2), List(3, 4)).toString)
做你想要的,而且解析器对额外的空格等是健壮的。
尽管如此,几乎可以肯定有更好的方法来做你在Scala尝试做的事情。
答案 1 :(得分:2)
在Scala中,就像在Java中一样(甚至是Python,虽然库通常遵循约定),但不能保证.toString
会生成一些已编译的内容,它将重新创建该对象。事实上,Long
和String
等常见类型不会产生可用于重新创建它们的字符串输出。
请注意,生成可用于重新创建实例的输出的标准方法是通过序列化。如果这就是你想要的,请查阅。
答案 2 :(得分:0)
你知道它是Int列表吗?
val li = List(List(1,2), List(3,4))
val s = li.toString
s.replaceAll ("[^0-9) ]", "").split ("\\)").map(_.split (" ").filterNot (_.equals ("")).map (_.toInt).toList).toList
res86: List[List[Int]] = List(List(1, 2), List(3, 4))